Pertimbangkan borang berikut:
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
. Saya ingin menyertai dua jadual ini untuk menghasilkan keputusan berikut:
| 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 |
Penyelesaian adalah dengan menggunakan sambungan penuh:
select * from `t1` left join `t2` on `t2`.`date` = `t1`.`date` union select * from `t1` right join `t2` on `t2`.`date` = `t1`.`date`;
Ini akan memberikan saya hasil yang saya inginkan. Tetapi menggunakan pernyataan where
memecahkan segala-galanya:
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";
Saya menjangkakan keputusan ini:
| 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 |
Tetapi saya mendapat keputusan ini:
| t1.date | t1.value | t2.date | t2.value | | | | | | | 2022-03-01 | 3 | null | null | | 2022-04-01 | 4 | 2022-04-01 | 4 |
Saya tahu apa yang salah tetapi tidak dapat mencari penyelesaian. Masalahnya ialah dengan semua baris kosong dalam jadual t1.date
> "whatever"过滤了t1
. Saya telah mencuba kaedah ini tetapi tidak berkesan:
where `t1`.`date` > "2022-01-01" or `t1`.`date` = null
Anda harus menggunakan
"NULL = NULL" menilai kepada palsu kerana NULL tidak mempunyai nilai. Oleh itu ia tidak boleh sama dengan mana-mana nilai lain (walaupun NULL lain). Cara yang betul ialah menggunakan
is null
Nampaknya anda harus menggunakan
t2.date > "2022-01-01"
dalam pertanyaan sertai yang betul.Lihat demo di https://dbfiddle.uk/reo8UanD.