MYSQL 来自第一个 table 的所有行并使用 where 子句连接来自其他 table 的列

MYSQL ALL rows from first table and join columns from other table with where clause

我有 2 个 table,我想要第一个 table 的所有行,与第二个 table 的联合将取决于两件事,第一, ID_NAMES 匹配第二个,即 OPENED 列为零,否则用空值填充。范例

第一个tablenames

ID_NAMES   NAME
   1       test1
   2       test2
   3       test3
   4       test4

第二个Tablesurprise

ID_SURPRICE  ID_NAMES   ELEMENT   OPENED
     1           3        lion        0
     2           2         dog        1
     3           1         cat        0

我想要下一个结果

ID_NAMES NAMES ID_SURPRICE  ID_NAMES   ELEMENT   OPENED
     1   test1      3          1         cat        0
     2   test2     null       null       null      null
     3   test3      1          3         lion       0
     4   test4     null       null       null      null

我按以下方式执行查询,但它只 returns 与 where

一致的查询
SELECT names.*, surprise.* 
FROM names
    LEFT JOIN surprise
        ON names.ID_NAMES = surprise.ID_NAMES 
where surprise.OPENED = 0;

我要这里的答案:

基本上,如果我在我正在做的地方添加一个 inner join,那么我必须将该子句移动到 on

SELECT names.*, surprise.* 
FROM names
    LEFT JOIN surprise
        ON names.ID_NAMES = surprise.ID_NAMES AND surprise.OPENED = 0;

虽然您使用了左连接,但整个查询的行为类似于内部连接,这就是您没有得到预期结果的原因。

  • 查看变化
SELECT names.*, surprise.* 
FROM names
    LEFT JOIN surprise
        ON names.ID_NAMES = surprise.ID_NAMES and surprise.OPENED = 0
;

Tips: 当你使用left, right join时,这种情况你需要小心。在 where 子句中使用条件,查询将执行 inner join