我有两个表,一个包含月份列表,第二个包含这些月份的销售数据。但是几个月没有销售,因此没有创建这些行。即表1包含1月至12月。表2包含jan与销售,feb与销售,但march没有销售,所以这一行不存在,4月与销售。
我的要求是我需要出售jan与销售,feb与销售,与nosales游行,4月与销售。
如何为此构建查询?
答案 0 :(得分:1)
如果使用普通JOIN
,则不会丢弃没有匹配的行。
你想要的是LEFT JOIN
,它会保留第二个表中没有匹配行的行(你将输出FEB null
)
详细了解LEFT JOIN
https://www.w3schools.com/sql/sql_join_left.asp
答案 1 :(得分:1)
使用左外连接
table1 left outer join
table2 on table1.month = table2.month
答案 2 :(得分:0)
如果您没有销售,则不会有任何与销售月份相匹配的ID,因此不会显示任何行。如果您想要显示该行,则必须使用左连接。
select *
from month m left join sales s on m.id_month = s.id_month
希望它有所帮助!
答案 3 :(得分:0)
您可以使用LEFT OUTER JOIN执行以下操作:
SELECT
MONTH, SUM(ISNULL(SALES, 0))
FROM
MONTHS AS M
LEFT OUTER JOIN
SALES_TABLE AS S ON M.<PRIMARY KEY> = S.<FOREIGN KEY>
GROUP BY
M.<PRIMARY KEY>