我正在尝试通过一个MySQL请求将3个数据库表链接在一起。
数据库结构:
表1:
表2:
表3:
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
为空。您是否知道如何从表1和表1中获取数据? 2,在不使用两个请求的情况下让table3
的字段为空?
答案 0 :(得分: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'
如果所有表中都存在id,则INNER JOIN
会生成一组数据。即使LEFT JOIN
或table1
中没有记录,table2
也会返回table3
的记录。
如果您需要帮助学习加入语法,这里有一个很棒的visual explanation of joins
答案 1 :(得分: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"