2017-05-01 8 views
0

すでにさまざまな種類のJOINSを試しましたが、この単純なクエリを動作させることはできません。どのような場合でもテーブルbの対応するエントリがない場合でも、テーブルaの結果を得たいと思います。私が試した:この場合、MariaDB:LEFT OUTER JOINが行を返さない

SELECT a.user_id, 
     a.user_name, 
     b.first_name 
FROM users a 
LEFT OUTER JOIN members b 
ON a.member_uid = b.uid 
WHERE (a.user_name = 'TEST' 
    AND b.active = 1) 

を、= 1 b.activeを持っている。しかし、私はすべてが返されると、Bからの列がNULLになるから列を望んでいたことを前提とBにエントリがありません。しかし、このクエリをMariaDBのSQLウィンドウで実行すると、ゼロ行が返されます。

ご協力いただければ幸いです。

答えて

0

左外部結合は、表bのすべての行/データを、表bに一致するかどうかに関係なく取得します。しかし、where節に条件を入れてデータをフィルタリングし直しています。 b.active = 1を持つbにはエントリがないので、出力はありません。このように、クエリからb.active = 1を削除します。LEFT JOINを行うときにONまたはWHEREで物事を置くかどうかを重要

SELECT a.user_id, 
    a.user_name, 
    b.first_name 
FROM users a 
LEFT OUTER JOIN members b 
ON a.member_uid = b.uid 
WHERE a.user_name = 'TEST'; 
+0

OK、同意します。だから私はクエリの実行後にアクティブな状態を確認する必要があります。 – AntonSack

1

。 ( "OUTER" が無視されます。)

SELECT a.user_id, 
     a.user_name, 
     b.first_name 
FROM users a 
LEFT OUTER JOIN members b 
    ON a.member_uid = b.uid 
    AND b.active = 1    -- Note 
WHERE a.user_name = 'TEST' 

はそれをこの方法を考える:ONがfalseの場合

  • することが、すべてのNULLsと、行を保持します。
  • WHEREがfalseの場合は、行を戻しません。
関連する問題