如何解决获取查询的 SQL 结果
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
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
解决方法
由于左连接,您似乎没有得到结果。按照您的做法,它不会匹配 California,因为它没有 Sales 数据表中的数据。
试试这个:
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:它选择您左侧的源/根表的所有记录,并选择右侧表中的匹配记录。即使匹配 在右表中找不到记录,它将显示左表的所有记录 边桌。
在 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 条记录。
如果您在 headquarter
子句中使用源/根表 FROM
,那么它将选择您所有的总部并显示在 salesTable
中匹配的记录。
正确的查询如下。
SELECT hq.name,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。