2

user1 と user2 の 8 つの特定の組み合わせを取得する SELECT クエリが必要です (user2 と user1 の組み合わせも持つ価値があり、冗長ではありません)。「IN」ステートメントは価値があるように見えました。

直接関連する質問。1. "WHERE IN" ステートメントをネストできますか?

  1. そうでない場合、指定できるようにクエリを最も効果的/最も簡単に構造化するにはどうすればよいですか (user1 と user2 が位置を切り替える 4 つのペアの場合 - 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)...etc ?

[この時点で、クエリを実行して関連情報を 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;'
4

1 に答える 1

4

クエリには 1 つののみを含めることができWHEREANDますが、その式では複数の条件をorで組み合わせることができますOR

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',
               ...)
于 2012-10-25T17:20:35.607 に答える