MySQL中的"where"语句会中断全连接
P粉141925181
P粉141925181 2023-09-07 21:23:58
0
2
465

考虑以下表格:

create table `t1` ( `date` date, `value` int ); create table `t2` ( `date` date, `value` int ); insert into `t1` (`date`, `value`) values ("2022-01-01", 1), ("2022-03-01", 3), ("2022-04-01", 4); insert into `t2` (`date`, `value`) values ("2022-01-01", 1), ("2022-02-01", 2), ("2022-04-01", 4);

t1表缺少2022-02-01日期,t2表缺少2022-03-01。我想要将这两个表连接起来,产生以下结果:

| t1.date | t1.value | t2.date | t2.value | | | | | | | 2022-01-01 | 1 | 2022-01-01 | 1 | | null | null | 2022-02-01 | 2 | | 2022-03-01 | 3 | null | null | | 2022-04-01 | 4 | 2022-04-01 | 4 |

解决方案是使用全连接:

select * from `t1` left join `t2` on `t2`.`date` = `t1`.`date` union select * from `t1` right join `t2` on `t2`.`date` = `t1`.`date`;

这样可以得到我想要的结果。但是使用where语句会破坏一切:

select * from `t1` left join `t2` on `t2`.`date` = `t1`.`date` where `t1`.`date` > "2022-01-01" union select * from `t1` right join `t2` on `t2`.`date` = `t1`.`date` where `t1`.`date` > "2022-01-01";

我期望得到这个结果:

| t1.date | t1.value | t2.date | t2.value | | | | | | | null | null | 2022-02-01 | 2 | | 2022-03-01 | 3 | null | null | | 2022-04-01 | 4 | 2022-04-01 | 4 |

但我得到了这个结果:

| t1.date | t1.value | t2.date | t2.value | | | | | | | 2022-03-01 | 3 | null | null | | 2022-04-01 | 4 | 2022-04-01 | 4 |

我知道出了什么问题,但找不到解决方法。问题在于t1.date> "whatever"过滤了t1表中的所有空行。我已经尝试过这个方法,但不起作用:

where `t1`.`date` > "2022-01-01" or `t1`.`date` = null
P粉141925181
P粉141925181

全部回复 (2)
P粉201448898

你应该使用

where `t1`.`date` > "2022-01-01" or `t1`.`date` is null

"NULL = NULL" 的结果为 false,因为 NULL 没有值。因此它不能与任何其他值相同(甚至是另一个 NULL)。正确的方法是使用is null

    P粉729198207

    似乎你应该在右连接查询中使用t2.date > "2022-01-01"

    select * from `t1` left join `t2` on `t2`.`date` = `t1`.`date` where `t1`.`date` > "2022-01-01" union select * from `t1` right join `t2` on `t2`.`date` = `t1`.`date` where `t2`.`date` > "2022-01-01";

    https://dbfiddle.uk/reo8UanD上查看演示。

      最新下载
      更多>
      网站特效
      网站源码
      网站素材
      前端模板
      关于我们 免责声明 Sitemap
      PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!