加入但返回表中的所有记录

时间:2013-06-28 10:03:07

标签: php sql database

我有以下SQL查询:

SELECT * FROM `table1` INNER JOIN `table2` ON table1.messageid=table2.messageid WHERE `venue_active` = 1

以上工作正常,但它只返回两个表都有messageid字段的字段。

我的问题是,如果table2中有messageid匹配,我需要它从Table1返回所有字段。

因此,换句话说,我需要从Table1返回所有记录,并从Table2返回所有记录,其中有一个与两者都匹配的messageid。

我该怎么做?

3 个答案:

答案 0 :(得分:4)

使用LEFT JOIN而不是

SELECT  * 
FROM    `table1` LEFT JOIN 
        `table2` ON table1.messageid=table2.messageid 
WHERE   `venue_active` = 1

也就是说,只有在venue_active也是table1的一部分而不是table2的情况下,它才会起作用。

查看不同的场景

SQL Fiddle DEMO

答案 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
相关问题