Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 如何显示产品表中的所有颜色以及@color表中的所有颜色_Tsql - Fatal编程技术网

Tsql 如何显示产品表中的所有颜色以及@color表中的所有颜色

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

我正在学习MVA T-SQL初学者课程,在这个特殊的实验问题上花费的时间太长了:

创建一个表变量,并用不同的 SalesLT.Product表中的颜色。然后使用table变量 筛选从中返回产品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指定一种颜色?

您不能将表格放入
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
缩小了选择范围,但没有指定数据库。我将确保以后这样做。谢谢