2017-04-26 9 views
0

私は2つのテーブルを持っています。 table1のtable2 idがnullでない場合、table1のすべてのデータとtable2のすべてのデータを取得します。 ユーザーが2つのアドレスを持つ場合に2つのテーブルが必要です。table1のtable2 idがnullでない場合、table2への参加方法

TABLE1
ID、名前、電話は、行が

表2存在する場合
table2idは、表2からのヌルまたはIDであってもよいtable2id:
ID、アドレス、状態、国

私はこのクエリを持っていますが、動作しません。私が読んだものから、

SELECT * FROM `table1` JOIN `table2` ON `table1`.`table2id` = `table2`.`id` WHERE `table1`.`id` = '2' AND `table1`.`table2id` IS NOT NULL 

は、私は、NOT NULL IF選択、またはサブを必要とするかもしれないと思うが、私はそれらを構造化する方法がわからないです。 アイデア

+0

http://stackoverflow.com/questions/23582387/mysql-join-if-field-is-not-null – Bram

答えて

1

テーブルの構造が正しくない可能性があります。

表1:ID、名前、電話
あなたはこのようなテーブル1

で各レコードにN個のアドレスを持つことができますので、あなたが表2でforeingキーを置くために良いだろう表2:id、住所、州、国、table1id。

LEFT JOINを使用すると、Table2に関連するアドレスがなくても、Table1のすべてのレコードを選択できます。

SELECT * 
FROM TABLE1 
LEFT JOIN TABLE2 ON (TABLE1.ID = TABLE2.TABLE1ID) 

NULL値を表2のフィールドを持つSELECT結果の記録は、任意のアドレスを持っているdoesntの。

+0

ありがとうございます。はい、1人のユーザーに対して複数のアドレスを設定したいと考えています。私は鍵で正しく考えていませんでした。 – Cambo

0

それを解決するために、これを試してみてください:

SELECT * FROM table1 LEFT JOIN table2 ON table1.table2id = table2.id WHERE table1.id = '2'; 
+0

回答ありがとうございましたが、フィリペスの回答は本当に必要なものでした。 – Cambo

0

あなたは例えば、そのためにLEFT JOINを使用する必要があります。:

SELECT t1.id, t1.name, t1.phone, t2.address, t2.state, t2.country 
FROM table1 t1 LEFT JOIN table2 t2 ON t1.table2id = t2.id 
WHERE t1.id = 2; 

一致する行が存在しない場合にはt2.*の列のNULL値を返します。

Here'sLEFT JOINのMySQLのマニュアル。

+0

回答ありがとうございましたが、フィリペスの回答は本当に必要なものでした。 – Cambo

関連する問題