これらの 3 つのテーブルがあります:
リーリー次の条件の少なくとも 1 つを満たす行をレポート テーブルから取得したいと考えています:
リーリーまず、一般公開される新しいレポートを作成します:
リーリーこの場合、別のレポートには user_id = 1 でのみアクセスできます:
リーリーこの場合、別のレポートには group_id = 1
によってのみアクセスできます。 リーリー現在、3 つの行があります。それぞれにアクセス可能で、1 つの行は user_id = 1 によってのみアクセスでき、もう 1 つの行は group_id = 1 によってのみアクセスできます。
user_id = 1 であるすべての行を教えてください:
リーリー2 行が表示されます。それは動作します。
group_id = 1 のすべての行を教えてください:
リーリー2 行が表示されます。それは動作します。
###しかし。 report_users または report_groups が空の場合、結果は得られません。最初に次のクエリを実行します:リーリー
前と同じクエリを実行すると、空のセットが返されます。なぜ?実際、送信している user_id と group_id に違いはないようです。常に 0 行が得られます。私には、2 つのテーブルのうちの 1 つが空であるという理由だけで結果が得られないように思えます。 クエリ自体に何か問題があるのでしょうか?
このコード行をどうするか:
リーリーは 3 つのテーブルの (古いスタイルの)
CROSS JOIN
です。これは、テーブルの 1 つが空の場合、結果も空になることを意味します。代わりに
リーリーEXISTS
を使用してください: