国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

MySQL中的"where"語(yǔ)句會(huì)中斷全連接
P粉141925181
P粉141925181 2023-09-07 21:23:58
0
2
725

考慮以下表格:

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。我想要將這兩個(gè)表連接起來(lái),產(chǎn)生以下結(jié)果:

| 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`;

這樣可以得到我想要的結(jié)果。但使用where語(yǔ)句會(huì)破壞一切:

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";

我期望得到這個(gè)結(jié)果:

| 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        |

但我得到了這個(gè)結(jié)果:

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

我知道出了什麼問(wèn)題,但找不到解決方法。問(wèn)題在於t1.date > "whatever"過(guò)濾了t1表中的所有空白行。我已經(jīng)嘗試過(guò)這個(gè)方法,但不起作用:

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

全部回覆(2)
P粉201448898

你應(yīng)該使用

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

"NULL = NULL" 的結(jié)果是 false,因?yàn)?NULL 沒有值。因此它不能與任何其他值相同(甚至是另一個(gè) NULL)。正確的方法是使用 is null

P粉729198207

似乎你應(yīng)該在右邊連接查詢中使用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上查看示範(fàn)。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板