MySQL选择具有相同字段值的多个连接对象的记录

时间:2015-02-20 21:45:52

标签: mysql

道歉;我的问题在具体的例子中更加清晰。

我有两个表 - 一个用于人,一个用于地址。我把它们组合在一起并选择了相关部分:

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,这就像我来的那样接近。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

一种可能性是加入地址表并仅返回没有活动记录的值:

Select P.* from People P
left join (Select * from addresses where Address_status="ACTIVE") A
on P.id=A.pid
where A.pid is null;

这里的缺点是你还会返回任何没有注册地址的用户,这可能不是预期的行为。