Tsql 如何显示产品表中的所有颜色以及@color表中的所有颜色
我正在学习MVA T-SQL初学者课程,在这个特殊的实验问题上花费的时间太长了: 创建一个表变量,并用不同的 SalesLT.Product表中的颜色。然后使用table变量 筛选从中返回产品ID、名称和颜色的查询 SalesLT.Product表,以便仅使用列表中列出的颜色的产品 返回表变量 我的问题是:Tsql 如何显示产品表中的所有颜色以及@color表中的所有颜色,tsql,Tsql,我正在学习MVA T-SQL初学者课程,在这个特殊的实验问题上花费的时间太长了: 创建一个表变量,并用不同的 SalesLT.Product表中的颜色。然后使用table变量 筛选从中返回产品ID、名称和颜色的查询 SalesLT.Product表,以便仅使用列表中列出的颜色的产品 返回表变量 我的问题是: DECLARE @colors table (color varchar(55)) INSERT INTO @colors SELECT DISTINCT color FROM sales
DECLARE @colors table
(color varchar(55))
INSERT INTO @colors
SELECT DISTINCT color FROM saleslt.Product
SELECT p.productID, p.name, p.color
FROM saleslt.product AS p
WHERE color=@color;
我收到错误消息,必须声明标量变量“@color”。这是否意味着我只能为@colors指定一种颜色?您不能将表格放入
WHERE
子句中,因为这没有任何意义。这里的一种方法是将两个表连接在一起:
SELECT
p.productID,
p.name,
p.color
FROM saleslt.product p
INNER JOIN @colors c
ON p.color = c.color
联接背后的基本思想是,只有具有出现在@color
表中的颜色的产品记录才会保留在结果集中
您还可以使用WHERE EXISTS
对该查询进行措辞:
SELECT
p.productID,
p.name,
p.color
FROM saleslt.product p
WHERE EXISTS (SELECT 1 FROM @colors c WHERE p.color = c.color)
提示:使用适当的软件(MySQL、Oracle、DB2等)和版本(例如,
sql-server-2014
)标记数据库问题很有帮助。语法和特征的差异通常会影响答案。请注意,tsql
缩小了选择范围,但没有指定数据库。我将确保以后这样做。谢谢