2010-12-13 7 views
1

3つのテーブルからデータを取得したいが、3つ目のテーブルにデータが存在しない場合は、他の2つのテーブルのデータを取得する必要があります。3つのテーブルのデータ

私は今、クエリを持っている:

SELECT m.name, m.zipcode, p.lat, p.lon, meta.meta_value 
FROM members AS m 
INNER JOIN zipcodes AS p ON m.zipcode = p.zipcode 
INNER JOIN usermeta AS meta ON m.id = meta.id 
WHERE m.zipcode = p.zipcode AND meta.meta_key = 'image' m.country = "USA" 

m.idmeta.idは、それらのすべてのために存在していません。

m.idのユーザーの場合、「画像」はすべて存在しません。

「画像」とm.idの存在とは関係なく、2つの他のテーブルからデータを取得したいと考えています。

どうすればいいですか?

答えて

0

どう

SELECT m.name, m.zipcode, p.lat, p.lon, meta.meta_value 
FROM members AS m 
INNER JOIN zipcodes AS p ON m.zipcode = p.zipcode 
LEFT OUTER JOIN usermeta AS meta ON m.id = meta.id 
WHERE m.zipcode = p.zipcode AND COALESCE(meta.meta_key,'image')='image' AND m.country = 'USA' 
+0

ありがとう!良いですが、まだ正しくありません! :-(私は約218列の313を取得します。 – Helge

+0

は正しくありません。どの行が除外されていますか?where句のすべての列を結合してみてください: WHERE COALESCE(meta.meta_key、 'image')= 'image' AND COALESCE m.zipcode = p.zipcodeは既にON句で書かれているため、削除しました) – YudhiWidyatama

+0

変更後も同じ出力です!すべてのユーザが持っているわけではありませんmeta.idに対応するm.id?一部のユーザーはメンバー表にのみ存在しますが、この特定のタイプのIDはありません。member.idがない場合は、 meta.idを持っています – Helge

1

INNER JOINsを使用しています。 OUTER JOINSを使用して、条件がfalseの結合表の列にNULL値を取得します。例えば

SELECT m.name, m.zipcode, p.lat, p.lon, meta.meta_value 
FROM members AS m 
LEFT OUTER JOIN zipcodes AS p ON m.zipcode = p.zipcode 
LEFT OUTER JOIN usermeta AS meta ON m.id = meta.id 
WHERE m.zipcode = p.zipcode AND meta.meta_key = 'image' m.country = "USA" 
+0

にクエリを変更することについて感謝フリオが、これは上記のクエリとまったく同じ出力を提供します! – Helge

+0

@Helge私は知っていますが、今はNULL値を持っていますので、WHERE条件式を使ってデータを取得することができます。例えば、 'A IN(possible_val1、possible_val2、...、NULL)' –

関連する問題