0

我有以下 SQL 查询:

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

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

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

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

我怎样才能做到这一点?

4

3 回答 3

4

使用LEFT JOIN而不是

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

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

看看不同的场景

SQL 小提琴演示

于 2013-06-28T10:05:37.530 回答
1

使用LEFT联接而不是INNER

例如:

SELECT * FROM `table1` 
LEFT JOIN `table2` ON table1.messageid=table2.messageid 
WHERE `venue_active` = 1
于 2013-06-28T10:05:39.787 回答
0

要么你需要一个LEFT JOIN,要么

FULL OUTER JOINMySQL的解决方法:

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
于 2013-06-28T10:10:48.623 回答