"在哪里?" SQL中的子句

时间:2016-02-25 00:53:39

标签: sql where-in

我是SQL的新手并且被#34; WHERE 1 IN"条款,我的问题是:

让我们使用w3schools中的数据库作为示例。

如果我查询为:

screen

此查询的含义是什么?任何帮助将不胜感激,谢谢!

3 个答案:

答案 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
              );