我有三张桌子:
用户,众议院和众议院事件
House有一个foreign_key(user_id)给User,一个HouseEvent有一个foreign_key(house_id)到House
您可以在此处查看架构:http://sqlfiddle.com/#!9/f08db/5 -
我知道如何让所有没有房子的用户得到:
SELECT * FROM User
LEFT OUTER JOIN House u ON u.user_id = user.id
WHERE u.user_id IS NULL
但是我怎么能进入一个查询,所有没有房子的用户和那些有(至少)暂停事件的房子的用户。
所以,在这个例子中,我会得到Lee
,因为他没有房子,我也会得到John
,因为即使他有房子,其中一个房子也有关联暂停活动。
答案 0 :(得分:1)
UNION
2个查询在一起?
SELECT u.id, u.name FROM User u
JOIN House h ON h.user_id = u.id
JOIN HouseEvent he ON he.house_id = h.id AND he.name = 'suspended'
UNION
SELECT u.id, u.name FROM user u
LEFT JOIN house h ON h.user_id = u.id
WHERE h.user_id IS NULL
答案 1 :(得分:0)
SELECT * FROM User
Where id not in (SELECT user_id FROM House) OR
id in (select user_id from House h, HouseEvent he where he.house_id = h.id AND he.id = 2)
答案 2 :(得分:0)
您可以在不使用SUB QUERY
的情况下执行此操作,只需使用LEFT JOIN
这里是查询:
SELECT User.name FROM User
LEFT JOIN House h on h.user_id = user.id
LEFT JOIN HouseEvent e on h.user_id = e.house_id
WHERE h.user_id IS NULL OR e.name = 'suspended'
GROUP BY User.name