对标题表示歉意;通过具体示例,我的问题更加清楚。
我有两张表 - 一张用于人员,一张用于地址。我将它们组合在一起并选择了相关部分:
ID | Address | Address_Status ------------------------------- 1 | 2 Main St | Active 1 | 19 Elm Rd | Inactive 1 | 7 Red Ave | Active 2 | 9 Gold St | Inactive 2 | 3 Rich St | Inactive
我正在尝试选择拥有所有非事件地址的人员的 ID。这意味着在输出中,唯一的记录应该是 ID = 2。我尝试按 ID 对它们进行分组,然后使用 having (count(*) - count(Address_Status = 'I')) = 0
,这是我目前为止最接近的结果。
最佳答案
如果用户根本没有地址,则应该忽略它们,是吗? 在这种情况下,我会喜欢这样的东西:
SELECT People.ID, People.Name,
SUM(IF(Addresses.Address_Status = 'I', 1, 0)) AS InactiveCount,
SUM(IF(Addresses.Address_Status != 'I', 1, 0)) AS ActiveCount,
FROM People JOIN Addresses ON Addresses.personID = People.ID
GROUP BY People.ID
HAVING ActiveCount = 0 AND InactiveCount > 0
关于MySQL 选择具有相同字段值的多个连接对象的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28638779/