Betrachten Sie das folgende Formular:
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
. Ich m?chte diese beiden Tabellen verbinden, um das folgende Ergebnis zu erzielen:
| 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 |
Die L?sung besteht darin, die vollst?ndige Verbindung zu nutzen:
select * from `t1` left join `t2` on `t2`.`date` = `t1`.`date` union select * from `t1` right join `t2` on `t2`.`date` = `t1`.`date`;
Dadurch erhalte ich die gewünschten Ergebnisse. Aber die Verwendung der where
-Anweisung macht alles kaputt:
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";
Ich habe dieses Ergebnis erwartet:
| 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 |
Aber ich habe dieses Ergebnis erhalten:
| t1.date | t1.value | t2.date | t2.value | | | | | | | 2022-03-01 | 3 | null | null | | 2022-04-01 | 4 | 2022-04-01 | 4 |
Ich wei?, was los ist, kann aber keine L?sung finden. Das Problem sind alle leeren Zeilen in der t1.date
> "whatever"過濾了t1
-Tabelle. Ich habe diese Methode ausprobiert, aber sie funktioniert nicht:
where `t1`.`date` > "2022-01-01" or `t1`.`date` = null
你應該使用
where `t1`.`date` > "2022-01-01" or `t1`.`date` is null
"NULL = NULL" 的結(jié)果為 false,因為 NULL 沒有值。因此它不能與任何其他值相同(甚至是另一個 NULL)。正確的方法是使用 is null
似乎你應該在右連接查詢中使用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上查看演示。