簡體   English   中英

獲取 SQL 查詢結果

[英]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.idt2t3之前,所以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM