SQL SELECT IN返回两个属性

时间:2016-12-01 04:56:53

标签: sql database select relational

我想更好地理解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));

3 个答案:

答案 0 :(得分:1)

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

WHERE product_id = (1234, 16)

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

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

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

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

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

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

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

答案 1 :(得分:0)

Select内的

In不能有2列。这会引发错误。但是既然你正在寻找你不需要SUM(Unit_Price)的产品ID,下面的查询应该可以正常工作:

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

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

答案 2 :(得分:0)

您可以使用公用表表达式(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