0

1つのMySQLリクエストを介して3つのデータベーステーブルをリンクしようとしています。

データベース構造:

表1 :

  • table1_id(例:1)
  • table1_name(例:hello world)

表2:

  • table2_id(例:空)
  • table2_name(例:空)

表3:

  • table3_id(例:1)
  • table3_name(例:random_name

MySQLリクエスト

SELECT * FROM table1 AS a, table2 AS b, table3 AS c 
WHERE a.table1_id = b.table2_id 
 AND a.table1_id = c.table3_id AND table3_name = "random-name"

問題

table2前のリクエストは空であるため、結果を表示しません。table32つのリクエストを使用せずにのフィールドを空にして、テーブル1と2からデータを取得する方法を知っていますか?

4

2 に答える 2

2

LEFT JOINの代わりにを使用するようにリクエストを変更する必要がありますINNER JOIN

select *
from table1 t1
left join table2 t2
  on t1.table1_id = t2.table2_id
left join table3 t3
  on t1.table1_id = t3.table2_id
  and t3.table3_name = 'random-name'

INNER JOINid がすべてのテーブルに存在する場合、一連のデータが生成されます。またはにレコードがなくても、 はからLEFT JOINレコードを返します。table1table2table3

結合構文について学習するのに助けが必要な場合は、結合の視覚的な説明をご覧ください。

于 2013-01-05T17:15:50.663 に答える
0

カップルの考え:

  • を使用しないでくださいSELECT *。列に明示的に名前を付けます
  • 暗黙の結合構文を使用しないでください。ON句を使用する
  • 結合条件で「一致」しない行を保持するには、LEFT OUTER JOIN

したがって、これを試してください:

SELECT  a.table1_id, a.table1_name
      , b.table2_id, b.table2_name
      , c.table3_id, c.table3_name 
FROM   table1 AS a
LEFT OUTER JOIN table2 AS b
ON     b.table2_id = a.table1_id
JOIN table3 AS c
ON     c.table3_id = a.table1_id 
WHERE  c.table3_name = "random-name"
于 2013-01-05T17:23:19.527 に答える