【发布时间】:2016-02-04 09:33:59
【问题描述】:
我有以下查询来返回客户使用的工作(访问)数量以及他/她使用的不同兽医。
SELECT
customer.users_id AS CustID,
COUNT(VisitID) AS Jobs,
COUNT(DISTINCT VetID) AS Resources
FROM customer
LEFT JOIN visit ON customer.users_id = visit.CustID
GROUP BY customer.users_id
当我添加 WHERE 子句以仅计算未重新安排或取消的访问时,我的查询如下所示。
SELECT
customer.users_id AS CustID,
COUNT(VisitID) AS Jobs,
COUNT(DISTINCT VetID) AS Resources
FROM customer LEFT JOIN visit ON customer.users_id = visit.CustID
WHERE visit.Status != 'Cancelled' AND visit.Status != 'ReScheduled'
GROUP BY customer.users_id
但是,在这种情况下,我只获得没有任何取消或重新安排访问的客户,尽管我为客户使用左联接。
我如何适应这个 WHERE 子句?
【问题讨论】:
-
srickt01 给出了正确答案。在外连接记录中,列为空,因此将列
Status与=、<>或!=进行比较将永远不会为真,因此您的外连接记录将被删除,您就在原处一个内部连接。我想补充一点,NOT IN的几个AND !=更易读:visit.Status NOT IN ('Cancelled', 'ReScheduled')。 -
同意
NOT IN