MySQL - 如何根据另一个表中的条件计算一个表中的条目(除非何时)

时间:2017-09-23 18:29:35

标签: mysql select

我想做一件简单的事情而失败......

基本上我想根据一些值检查一个表中存在多少条目,与另一个表上的条目进行比较,并根据此比较计算第一个表的总条目数。

SELECT COUNT(*) 
FROM contacts c
INNER JOIN projects p ON p.ContactId = c.ContactId 
WHERE c.TypeofContactId = '2' 
AND p.CategoryId NOT IN (2,5)

这是什么意思?我有2个表,一个有我与客户的联系人,另一个是基于这些联系人创建的项目。

c.TypeofContactId 是什么类型的联系人(电话,电子邮件等)

p.CategoryId 是创建的项目类型。可以有50种类型。

这些项目附有'基于 ContactId 的联系人。

我想计算针对特定类型完成的所有联系人,但仅限于项目类别不是2或5.(所以其他任何事情......)

因此,如果它找不到c.type = 2的任何项目(不是2或5类型),我应该得到0个计数。

我在这里做错了什么?

感谢。

1 个答案:

答案 0 :(得分:3)

你可以这样做:

SELECT SUM(CASE WHEN p.CategoryId NOT IN (2,5) THEN 1 ELSE 0 END) AS TotalCount 
FROM contacts c
INNER JOIN projects p ON p.ContactId = c.ContactId 
WHERE c.TypeofContactId = '2' 

当您将p.CategoryId NOT IN (2,5)放在where子句中时,您将只获得符合此条件的行。