2010-12-02 13 views
0

私は同じIDで複数のジョインをしようとしており、各テーブルにはそのIDのエントリがある場合とない場合があります。可能な空の結果セットを持つ複数のテーブルでJOINSのデフォルト値を設定しますか?

SELECT a.value, b.value, c.value, d.value FROM tbl_a a 
JOIN tbl_b b ON a.id=b.id 
JOIN tbl_c c ON a.id=c.id 
JOIN tbl_d d on a.id=d.id 
WHERE a.id=123 

は明らかにこれはTBL_Aがエントリを持っていない持っていない場合、それは空の結果を返し、失敗合流ので、失敗しています。

私はあらゆる種類の左ジョインと外部ジョインを試しましたが、動作させることができませんでした。私はまた、were節を次のように設定しようとしました:WHERE a.id=123 OR b.id=123 OR ...しかし、それもうまくいきませんでした。

私は醜いUNIONを試みましたが、それは別の行に出力します。

SELECT count(*), "a", IFNULL(a.value,0) FROM tbl_a a WHERE a.id=123 
UNION 
SELECT count(*), "b", IFNULL(b.value,0) FROM tbl_b b WHERE b.id=123 
UNION 
etc... 

答えて

0

他の3つのidフィールドをWHERE句にORで追加してから、外部結合を実行します。

+0

なるほど、私は左外部結合をやっていた、私は右にやるべきこと外部結合とそれは動作するようです。 – kenhcwoo

+0

私はクエリを試しましたが、説明ではインデックスidを使用しないと言います:SELECT a.value、b.value、c.value、d.value FROM tbl_a a右外部ジョイントtbl_b b ON b.id = a .id右のジョインtbl_c c ON c.id = a.id右外側のジョインtbl_d dオンd.id = a.idどこa.id = 123またはb.id = 123またはc.id = 123またはd.id = 123 – kenhcwoo

0

別のアプローチは、JOIN-INGの他のすべてのテーブルに、ご希望のキーとLEFTを含む派生テーブルを作成することです:

SELECT a.value, b.value, c.value, d.value 
FROM (select 123 as id) as dummy 
LEFT JOIN tbl_a a ON dummy.id=a.id 
LEFT JOIN tbl_b b ON dummy.id=b.id 
LEFT JOIN tbl_c c ON dummy.id=c.id 
LEFT JOIN tbl_d d ON dummy.id=d.id 
関連する問題