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