查询 sql 结果 null 找不到 where in (array)
Query sql result null when not found where in (array)
汽车
id
brand
available
1
toyota
yes
2
nissan
yes
3
masda
no
4
tesla
yes
购买
id_car
date
price
1
2020-01
1
2020-02
2
2020-01
3
2020-01
3
2020-02
3
2020-03
4
2020-03
我需要如下结果table
id
brand
available
date
price
1
toyota
yes
2020-01
1
toyota
yes
2020-02
2
nissan
yes
2020-01
2
nissan
yes
2020-02
null
4
tesla
yes
2020-01
null
4
tesla
yes
2020-02
null
我的查询搜索必须使用可用性和日期(数组)
select .....
join ....
where
car.available = 'yes'
and purchase.date in ('2020-01', '2020-02')
我们可以在此处使用日历 table 交叉连接方法:
SELECT c.id, c.brand, 'yes' AS available, d.date, p.price
FROM (SELECT id, brand FROM car WHERE available = 'yes') c
CROSS JOIN (SELECT DISTINCT date FROM purchase) d
LEFT JOIN purchase p
ON p.id_car = c.id AND p.date = d.date
WHERE d.date IN ('2020-01', '2020-02')
ORDER BY c.id;
我们的想法是生成两组,一组用于所有可用的汽车品牌,另一组用于所有已知的可用日期。然后我们将这个中间 table 左连接到 purchase
table 以获得您想要的输出。
汽车
id | brand | available |
---|---|---|
1 | toyota | yes |
2 | nissan | yes |
3 | masda | no |
4 | tesla | yes |
购买
id_car | date | price |
---|---|---|
1 | 2020-01 | |
1 | 2020-02 | |
2 | 2020-01 | |
3 | 2020-01 | |
3 | 2020-02 | |
3 | 2020-03 | |
4 | 2020-03 |
我需要如下结果table
id | brand | available | date | price |
---|---|---|---|---|
1 | toyota | yes | 2020-01 | |
1 | toyota | yes | 2020-02 | |
2 | nissan | yes | 2020-01 | |
2 | nissan | yes | 2020-02 | null |
4 | tesla | yes | 2020-01 | null |
4 | tesla | yes | 2020-02 | null |
我的查询搜索必须使用可用性和日期(数组)
select .....
join ....
where
car.available = 'yes'
and purchase.date in ('2020-01', '2020-02')
我们可以在此处使用日历 table 交叉连接方法:
SELECT c.id, c.brand, 'yes' AS available, d.date, p.price
FROM (SELECT id, brand FROM car WHERE available = 'yes') c
CROSS JOIN (SELECT DISTINCT date FROM purchase) d
LEFT JOIN purchase p
ON p.id_car = c.id AND p.date = d.date
WHERE d.date IN ('2020-01', '2020-02')
ORDER BY c.id;
我们的想法是生成两组,一组用于所有可用的汽车品牌,另一组用于所有已知的可用日期。然后我们将这个中间 table 左连接到 purchase
table 以获得您想要的输出。