我有以下SQL查询:
SELECT * FROM `table1` INNER JOIN `table2` ON table1.messageid=table2.messageid WHERE `venue_active` = 1
以上工作正常,但它只返回两个表都有messageid字段的字段。
我的问题是,如果table2中有messageid匹配,我需要它从Table1返回所有字段。
因此,换句话说,我需要从Table1返回所有记录,并从Table2返回所有记录,其中有一个与两者都匹配的messageid。
我该怎么做?
答案 0 :(得分:4)
使用LEFT JOIN而不是
SELECT *
FROM `table1` LEFT JOIN
`table2` ON table1.messageid=table2.messageid
WHERE `venue_active` = 1
也就是说,只有在venue_active也是table1的一部分而不是table2的情况下,它才会起作用。
查看不同的场景
答案 1 :(得分:1)
使用LEFT
加入而不是INNER
例如:
SELECT * FROM `table1`
LEFT JOIN `table2` ON table1.messageid=table2.messageid
WHERE `venue_active` = 1
答案 2 :(得分:0)
您需要LEFT JOIN
或
MySQL的FULL OUTER JOIN
解决方法:
SELECT
a.*,
b.*
FROM
table1 a
LEFT JOIN
table2 b ON a.messageid = b.messageid
WHERE a.venue_active = 1
UNION
SELECT
a.*,
b.*
FROM
table1 a
RIGHT JOIN
table2 b ON a.messageid = b.messageid;
WHERE a.venue_active = 1