我有属于街道的房屋。用户可以购买几个房屋。如果用户拥有整条街道,我怎么知道呢?
street table with columns (id/name)
house table with columns (id/street_id [foreign key]
owner table with columns (id/house_id/user_id) [join table with foreign keys]
到目前为止,我正在使用count返回结果:
select count(*), street_id from owner left join house on owner.house_id = house.id group by street_id where user_id = 1
count(*) | street_id
3 | 1
2 | 2
更一般的计数:
select count(*) from house group by street_id returns:
count(*) | street_id
3 | 1
3 | 2
我如何才能知道,用户1拥有整条街道1但不拥有街道2?
感谢。
答案 0 :(得分:1)
执行反向查询,查询街道上不是您要查找的用户的所有者。如果您的结果集是> 0表示用户不拥有整条街道。
select count(*), street_id from owner left join house on owner.house_id = house.id group by street_id where user_id != 1
答案 1 :(得分:0)
此查询列出拥有整条街道的所有用户以及他们拥有的街道:
SELECT DISTINCT o.user_id, h.street_id, s.name FROM owner o
INNER JOIN house h ON h.id = o.house_id
INNER JOIN street s ON s.id = h.street_id
LEFT OUTER JOIN house h2 ON h2.street_id = h.street_id AND h2.id <> h.id
INNER JOIN owner o2 ON o2.house_id = h2.id AND o2.user_id <> o.user_id
WHERE o2.user_id IS NULL
在这种情况下,“拥有整条街道”,意味着没有其他所有者拥有同一条街道上的房屋。这也假定您拥有街道上每个房屋和所有者的数据。
它的工作方式是试图加入每个房子,并在同一条街上的房子与另一个所有者拥有。如果加入失败,则意味着在同一条街道上没有其他拥有不同所有者的房屋。