我是SQL的新手并且被#34; WHERE 1 IN"条款,我的问题是:
让我们使用w3schools中的数据库作为示例。
如果我查询为:
screen
此查询的含义是什么?任何帮助将不胜感激,谢谢!
答案 0 :(得分:5)
此查询表示客户的订单数为1.如果使用=
编写,则可能更清楚:
SELECT C1.CustomerID
FROM Customers C1
WHERE 1 = (SELECT COUNT(O1.CustomerID)
FROM Orders O1
WHERE C1.CustomerID = O1.CustomerID
);
子查询称为相关子查询,因为WHERE
子句具有外部查询的列。因此,对于每个客户,它计算与该客户ID匹配的订单数量。只有具有一个订单的客户才会出现在结果集中。
答案 1 :(得分:1)
正在检查从子选择返回的count()
是否返回一个。原因是您不能在where子句中使用count()
或其他聚合函数。以这种方式编写它允许您创建子选择的count()
部分,因此,我们可以检查返回值中的计数。
IN
的另一种方法是使用HAVING
构造将聚合函数移动到"右侧"选择。
答案 2 :(得分:0)
编写查询的一种有意义的方法是使用exists
。您只需检查每个sub-query
customer
的计数是否为1
SELECT C1.CustomerID
FROM Customers C1
WHERE EXISTS (SELECT 1
FROM Orders O1
WHERE C1.CustomerID = O1.CustomerID
HAVING COUNT(1)=1
);