[英]get SQL results of a query
我有一個樣本總部表
id name
1 California
2 Florida City
3 Washington DC
4 Oklahoma
我還有一個示例銷售數據表
id headquarter_id Sales Year
1 2 2000 2021
2 3 5000 2021
3 4 1000 2021
我的 SQL 查詢是
select hq.name, st.Year, st.sales from salesTable st
left join headquarters hq on hq.id = st.headquarter_id
結果是
name Year Sales
Florida City 2021 2000
Washington DC 2021 5000
Oklahoma 2021 1000
即使銷售表中沒有加利福尼亞的銷售記錄,是否有可能得到如下結果?
name Year Sales
California 2021 0
Florida City 2021 2000
Washington DC 2021 5000
Oklahoma 2021 1000
由於左連接,您似乎沒有得到結果。 按照您的方式,它與加利福尼亞不匹配,因為它在銷售數據表中沒有數據。
試試這個:
select
hq.name,
st.Year,
case when st.sales is null then 0 else st.sales end as sales
from headquarters hq
left join salesTable st on hq.id = st.headquarter_id
@Guilherme Barbosa 給了你正確的查詢,但讓我解釋一下它背后的原因。
LEFT JOIN :它 select 左側表的源/根表的所有記錄和右側表的 select 匹配記錄。 即使在右表上找不到匹配的記錄,它也會顯示左側表的所有記錄。
按照 JOIN 中從上到下的表順序如下。 t1
首先出現,所以它在查詢左側ON t1.id = t2.id
和t2
在t3
之前,所以ON t2.id = t3.id
SELECT *****
FROM table1 t1
LEFT JOIN table3 t2
**ON t1.id = t2.id**
LEFT JOIN table3 t3
**ON t2.id = t3.id**
現在在您的查詢中,您使用salesTable
作為查詢中的源/根表,它只有 3 個headquarter_id
並且它位於數據選擇查詢的左側(LEFT JOIN)。 因此它只返回 3 條記錄。
如果您在FROM
子句中使用源/根表headquarter
,那么它將轉到 select 您所有的總部並在salesTable
中顯示匹配的記錄。
正確查詢如下。
SELECT hq.name, st.Year,
CASE
WHEN st.sales IS NULL THEN 0
ELSE st.sales
END AS sales
FROM headquarters hq
LEFT JOIN salesTable st ON
hq.id = st.headquarter_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.