查询 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 以获得您想要的输出。