SQL SELECT 返回两个属性

SQL SELECT IN returning two attributes

我正在努力更好地理解 SELECT IN。这是一个有效的查询吗?

SELECT name 
FROM products
WHERE product_id IN
(SELECT product_id, SUM(unit_price)
FROM sales
GROUP BY product_id
HAVING (SUM(unit_price) > 200));

Select inside In 不能有 2 列。这将引发错误。但是由于您要查找的产品 ID 无论如何都不需要 SUM(Unit_Price),因此下面的查询应该可以正常工作:

SELECT name FROM products WHERE product_id IN (SELECT product_id FROM sales GROUP BY product_id HAVING (SUM(unit_price) > 200));

如果您想避免 IN 部分,也可以使用内部联接。

不,出于同样的原因,这不是一个有效的谓词:

WHERE product_id = (1234, 16)

比较一个标量等于一个元组是没有意义的。

请注意 SQL 确实允许您将元组与元组进行比较:

WHERE (product_id, 16) = (1234, 16)

但是两个元组中的元素个数必须相同

同样,您可以将元组与 returns 元组的子查询进行比较:

WHERE (product_id, 16) IN (SELECT product_id, SUM(unit_price) FROM ...

只要两个元组的元素数量相同。

您可以使用公用表表达式 (CTE) 来实现

;WITH CTE(ProductId, UnitPrice)
AS(
SELECT product_id, SUM(unit_price) 
FROM sales 
GROUP BY product_id 
HAVING (SUM(unit_price) > 200))

SELECT [Name], c.UnitPrice
FROM Products p INNER JOIN CTE c on p.Product_Id = c.ProductId