2011-06-20 9 views
0

tableA、tableB、およびtableCに参加する必要がありますが、tableBに対応する行がない可能性があります。私は現在どのようにクエリを行っているのですか?問題は、tableBに対応する行がない場合、結果を返さないことです。私のSQLスキルは非常に錆びているので、私はあなたの助けに感謝します。ありがとう。3 table sql join

SELECT [column names] 
FROM tableA AS a, tableB AS b, tableC as c 
WHERE b.blah = a.blah 
AND c.foo = a.foo 
AND [more where conditions] 
+0

どのRDBMSを使用していますか? – geoffspear

答えて

2

LEFT JOINを使用可能にするためにJOINを使用してください。 [全条件]がBにある場合

SELECT [column names] 
FROM 
    tableA AS a 
    LEFT JOIN tableB AS b ON b.blah = a.blah 
    JOIN tableC as c ON c.foo = a.foo 
4

,構文を使用しないでください。読めるLEFT JOIN ...

SELECT 
    * 
FROM 
    tableA 
LEFT JOIN 
    tableB 
    ON TableB.x = TableA.y 
LEFT JOIN 
    tableC 
    ON TableC.x = TableB.y 
    AND TableC.y = TableA.z 
0
SELECT [column names] 
FROM tableA AS a INNER JOIN tableC as c ON (c.foo = a.foo) 
LEFT OUTER JOIN tableB as B on (b.blah = a.blah) 
WHERE [more where conditions] 

は、その後、あなたはOUTER句でJOINに含める必要があります。

-1

ここでの用語(詳細を参照することができます)は外部結合です。他の回答は問題ありませんが、INNERまたはOUTERをテーブルcに追加するかどうかを注意してください(テーブルCに一致する行がない場合はレコードを返しますか)。ここに一般的な問題のリンクがあります。

http://www.w3schools.com/sql/sql_join_left.asp