9

私の目的は、LEFT OUTER JOIN が 4 番目のベン図を使用して意図していることを正確に実行することです: SQL ダイアグラム:

ここに画像の説明を入力

私のクエリはまったく値を返しません。実際には、Consultant_Memberships 内のすべてから、Consultant_Memberships_Lists 内に格納されているものを差し引いた値を返す必要があります。

理解を容易にするために、 SQL Fiddleを参照してください。

SELECT * 
FROM   consultant_memberships 
       LEFT OUTER JOIN consultant_memberships_list 
                    ON consultant_memberships.`id` = 
                       consultant_memberships_list.membership_id 
WHERE  consultant_memberships_list.consultant_id = $id 
       AND consultant_memberships_list.membership_id IS NULL 

クエリは、デモンストレーション目的で ID として「5」を使用して、正しい行を選択しようとしています。

4

2 に答える 2

19

あなたの現在のクエリは、基本的に句のINNER JOINせいでやっています。私はあなたが実際に使いたいと思っています:consultant_id = 5WHERE

SELECT * 
FROM   consultant_memberships m
LEFT OUTER JOIN consultant_memberships_list l
  ON m.`id` = l.membership_id 
  AND l.consultant_id = 5 
WHERE l.membership_id IS NULL;

デモで SQL Fiddle を参照してください

于 2013-02-13T20:01:19.407 に答える
3

使用する

SELECT * 
   FROM   consultant_memberships 
       LEFT  Outer JOIN consultant_memberships_list 
                ON consultant_memberships_list.membership_id = consultant_memberships.`id`  
                and  consultant_memberships_list.consultant_id = 5 
 where  consultant_memberships_list.membership_id IS NULL;

クエリ「consultant_memberships_list.consultant_id = 5」で以前に使用された Where 句は、左外部結合を無視していました。

于 2013-02-13T20:06:31.613 に答える