我正在进行MVA T-SQL初学者课程,而且我在这个特定的实验室问题上花了太长时间:
创建一个表变量并使用distinct列表填充它 SalesLT.Product表中的颜色。然后使用表变量来 过滤从中返回产品ID,名称和颜色的查询 SalesLT.Product表使只有颜色列出的产品 返回表变量。
我的查询是:
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分配一种颜色?
答案 0 :(得分:1)
您不能将表放入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)