如何显示产品表中同样位于@color表中的所有颜色

时间:2017-08-31 01:29:17

标签: tsql

我正在进行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分配一种颜色?

1 个答案:

答案 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)