これはほとんど左結合状態ですが、sqlで表現する方法はわかりません。 フィールドUser, Item, Flag
のテーブルOrders
を考えてみましょう。テーブルに表示されるが、Flag = Trueの行がないユーザーのリストが必要です。 (これらのフィールドにはNULLはありません)。同様に、ユーザーのすべての行でFlag = Falseで、そのような行があります。私は単純に書くでしょう条件を満たすsql不一致キー
: SELECT T1.User FROM Orders AS T1 LEFT JOIN Orders AS T2 ON T1.User=T2.User WHERE T2.Flag=TRUE AND T2.User IS NULL
を右に行を選択して、何の一致を得ていない参加をチェックするために、それは右
私は試しました: SELECT T1.User FROM Orders AS T1 WHERE T1.User NOT IN (SELECT DISTINCT User FROM Orders WHERE Flag=TRUE)
しかし、Microsoft Accessでは、これは極端にのように、最初の行ごとに2番目の選択が実行されているかのように遅いです。
これまでのところ、唯一の解決策は、2番目の選択から一時テーブルを作成することでした。しかし、それはとても簡単な問題です、それをSQLで表現する良い方法がなければなりません。 (これが明らかであれば謝罪しますが、私はまだSQLの複雑なセマンティクスを通して自分のやり方を感じています)
最初のクエリで 'T1.User = NULL'を試してみてください。なぜ2番目のクエリでdistinctを使用するのですか? SQLの世界で頻繁に議論されている、[LEFT JOIN NULL、NOT IN、NOT EXISTS](http://www.google.com/search?q=left+join+vs+not+in)は不一致のために互換性がありますクエリを記録します。 – Parfait