【发布时间】:2019-11-26 22:24:20
【问题描述】:
我有一张名为supplier_rating 的表。此表用于存储每个供应商收到的评分和 no_of_stars。评分范围为 1-5。供应商可以拥有所有评级的条目,或者他们可以拥有一些评级。我想创建一个 SELECT 语句,它将返回供应商的所有评级。
代码 sn-ps
CREATE TABLE dbo.supplier_rating(
supplier_id INT
,star INT
,no_of_stars INT)
INSERT INTO dbo.supplier_rating VALUES (100,5,50),(100,3,30),(200,2,20),(200,1,10);
我想要一个 select 语句,该语句将返回如下所示的供应商 ID = 100 的结果集
supplier_id rating no_of_stars
100 5 50
100 4 0
100 3 30
100 2 0
100 1 0
以下是我正在使用的查询。我正在创建临时表,该表的所有评分都在 1-5 之间,并且我正在使用 supplier_rating 表进行 LEFT JOIN,但它正在返回我想要的结果集
CREATE TABLE #temp_rating(star INT);
INSERT INTO #temp_rating VALUES (1),(2),(3),(4),(5);
SELECT r.star,sr.no_of_stars
FROM #temp_rating r
LEFT JOIN dbo.supplier_rating sr ON r.star = sr.star
WHERE sr.supplier_id = 100;
【问题讨论】:
-
很像this one?
-
了解 LEFT JOIN ON 返回的内容:INNER JOIN ON 行 UNION ALL 不匹配的左表行,由 NULL 扩展。作为 OUTER JOIN 的一部分,始终知道您想要什么 INNER JOIN。 WHERE 或 INNER JOIN ON 在 OUTER JOIN ON 删除任何由 NULL 扩展的行后,需要右 [sic] 表列不为 NULL,即只留下 INNER JOIN ON 行,即“将 OUTER JOIN 转换为 INNER JOIN”。你有那个。
标签: sql sql-server join left-join