首页 > 解决方案 > MYSQL ALL 来自第一个表的行并使用 where 子句连接来自其他表的列

问题描述

我有 2 个表,我想要第一个表的所有行,与第二个表的联合将取决于 2 件事,第一个是ID_NAMES匹配,第二个是该列为OPENED零,否则用 null 填充。例子

第一张桌子names

ID_NAMES   NAME
   1       test1
   2       test2
   3       test3
   4       test4

第二张表surprise

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

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

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

标签: mysqlsqljoinleft-join

解决方案


我想在这里得到答案:

LEFT JOIN 查询不返回第一个表中的所有行

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

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

推荐阅读