我的内部联接仅返回第一行,但在我的表中有多行。我有3张桌子。我正在进行从主要到次要到第三个的连接。
Main(左连接) - >二级(内部联接) - >第三(返回一行而不是多行)
第一张表
id name
1 john
2 abel
3 julia
第二张表
id first_table(FK)
1 1
2 2
第三表
id second_table(FK) name
1 1 hello
2 1 haha
3 2 thanks
查询
SELECT * FROM first_table
LEFT JOIN second_table ON first_table.id = second_table.first_table
INNER JOIN third_table ON third_table.second_table = second_table.id
它返回第一个表和第二个表,其中包含来自第三个表的单行
我想要的是什么:
返回第一个表和第二个表,其中包含来自第三个表的多行
答案 0 :(得分:0)
你可以做到
SELECT * FROM first_table
LEFT JOIN
(second_table
INNER JOIN third_table ON third_table.second_table = second_table.id)
ON first_table.id = second_table.first_table;
或与原始查询类似的结果。
SELECT * FROM first_table
INNER JOIN
(second_table
INNER JOIN third_table ON third_table.second_table = second_table.id)
ON first_table.id = second_table.first_table;
答案 1 :(得分:0)
您的查询可能有误。您正在从first_table获取并在first_table上应用LEFT连接,而JOIN条件使用second_table.first_table列。这将在执行时抛出异常。它应该是这样的,并将为您提供您想要的多个记录。我已经测试了这个。
SELECT * FROM first_table
LEFT JOIN second_table ON first_table.id = second_table.first_table
INNER JOIN third_table ON third_table.second_table = second_table.id