2011-12-09 15 views
0

テーブルに一致するものがないのに他のテーブルと一致するものがあればクエリを無視することは可能でしょうか? のは、私は3つのテーブルを持っていると私は、このようなクエリを使用するとしましょう:一致するテーブルを無視する

SELECT table1.username, table2.age, table3.something_else FROM table1, table2, table3 
WHERE (table1.id = 37) 
AND (table2.id = table1.id) 
AND (table3.id = table1.id) 

だから、idがすべてのテーブルに存在する場合、これは動作しますが、idはテーブルの1つのクエリwould'ntリターンに存在しない場合すべての値。そのIDが存在する列を返す場合は、どのようにクエリを記述しますか?あなたは暗黙的に行っているカンマを使用して追加のテーブルを登録しようが、それは内部結合である含まれている場合

答えて

3

は、例えば

を登録しよう

SELECT table1.username, table2.age, table3.something_else 
FROM table1 
LEFT JOIN table2 ON (table2.id = table1.id) 
LEFT JOIN table3 ON (table3.id = table1.id) 
WHERE (table1.id = 37) 

LEFTを使用します。上の記事を読むまで

は、ここでは平均時間でhere

に参加する素敵な要約画像です:

Visual description of join types

+0

おかげでたくさんのことを試してみて、加入についての詳細を読みます。左に参加する方が早い? – Josef

+0

SQLは、さまざまな種類の結合を処理するように設計されています。しかし、実際の違いについては、確かに知る唯一の方法はテストすることです。それは非常に多くの要因に依存します。あなたがそれが遅いことに気づいたら、最適化を試みることをお勧めします。それ以外のことは心配しないでください。 – slifty

関連する問題