[英]Query sql result null when not found where in (array)
車
ID | 品牌 | 可用的 |
---|---|---|
1個 | 豐田 | 是的 |
2個 | 日產 | 是的 |
3個 | 馬斯達 | 不 |
4個 | 特斯拉 | 是的 |
購買
id_car | 日期 | 價格 |
---|---|---|
1個 | 2020-01 | 50 美元 |
1個 | 2020-02 | $52 |
2個 | 2020-01 | $43 |
3個 | 2020-01 | 35美元 |
3個 | 2020-02 | $32 |
3個 | 2020-03 | 15 美元 |
4個 | 2020-03 | $43 |
我需要下表中的結果
ID | 品牌 | 可用的 | 日期 | 價格 |
---|---|---|---|---|
1個 | 豐田 | 是的 | 2020-01 | 50 美元 |
1個 | 豐田 | 是的 | 2020-02 | $52 |
2個 | 日產 | 是的 | 2020-01 | $43 |
2個 | 日產 | 是的 | 2020-02 | null |
4個 | 特斯拉 | 是的 | 2020-01 | null |
4個 | 特斯拉 | 是的 | 2020-02 | null |
我的查詢搜索必須使用可用性和日期(數組)
select .....
join ....
where
car.available = 'yes'
and purchase.date in ('2020-01', '2020-02')
我們可以在這里使用日歷表交叉連接方法:
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;
這個想法是生成兩組,一組用於所有可用的汽車品牌,另一組用於所有已知的可用日期。 然后我們將這個中間表加入到purchase
表中,得到你想要的 output。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.