【问题标题】:Nesting "WHERE IN" (or AND, OR statements) SQLite嵌套“WHERE IN”(或 AND、OR 语句)SQLite
【发布时间】:2012-10-15 22:20:10
【问题描述】:

我想要一个 SELECT 查询,它可以获取 user1 和 user2 的 8 个特定组合(并且 user2 和 user1 的组合也值得拥有,而不是多余的)。 “IN”声明似乎很有价值。

直接相关的问题。 1. WHERE IN 语句可以嵌套吗?

  1. 如果不是,我怎样才能最有效/最轻松地构建查询,以便我可以指定(对于 4 对,其中 user1 和 user2 切换位置 - 8 个组合):(where user1 = billy AND user2 = sue) OR (where user1 = sue AND user2 =billy) OR (user1 = jack AND user2 = jill) OR (user1 = jill AND user2 = jack)...等?

[此时运行查询和 grep 相关信息似乎更容易。]

目前的想法:

sqlite3 -header -separator , some.db "SELECT DISTINCT programquality.time, simscores.user1, simscores.user2, simscores.simscore, programquality.gf, programquality.ga, programquality.pq FROM simscores LEFT JOIN programquality ON programquality.time = simscores.time AND programquality.username = simscores.user1 WHERE programquality.pq IS NOT NULL WHERE simscores.user1 IN ("abraham","billy","carl","dave","ethan","frank","george","harry") WHERE simscores.user2 IN ("abraham","billy","carl","dave","ethan","frank","george","harry");"

我用过这个,但是显示了一些不相关的数据。

sqlite3 -header -separator , some.db 'SELECT DISTINCT programquality.time, simscores.user1, simscores.user2, simscores.simscore, programquality.gf, programquality.ga, programquality.pq FROM simscores LEFT JOIN programquality ON programquality.time = simscores.time AND programquality.username = simscores.user1 WHERE (simscores.user1  = "billy" OR simscores.user1 = "suzy" OR simscores.user1 = "john") AND (simscores.user2  = "billy" OR simscores.user2 = "suzy" OR simscores.user2 = "john") AND programquality.pq IS NOT NULL AND programquality.time IS NOT NULL;'

【问题讨论】:

    标签: sqlite nested where-in


    【解决方案1】:

    查询can have only one WHERE clause,但该表达式可以将多个条件与ANDOR 组合:

    SELECT ...
    FROM ...
    WHERE programquality.pq IS NOT NULL AND
          simscores.user1 IN ('abraham', 'billy', ...) AND
          simscores.user2 IN ('abraham', 'billy', ...)
    

    但是,这些IN 表达式不允许您匹配user1user2特定 值。 您无法避免列出您想要的所有组合。

    但是,您可以通过检查组合名称的有效组合来稍微简化表达式:

    ... WHERE ... AND
              simscores.user1 || '+' || simscores.user2
               IN ('billy+sue', 'sue+billy',
                   'jack+jill', 'jill+jack',
                   ...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 2021-02-02
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 2018-10-26
      相关资源
      最近更新 更多