sql查询问题/计数

时间:2010-04-04 13:36:09

标签: sql mysql

我有属于街道的房屋。用户可以购买几个房屋。如果用户拥有整条街道,我怎么知道呢?

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?

感谢。

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

在这种情况下,“拥有整条街道”,意味着没有其他所有者拥有同一条街道上的房屋。这也假定您拥有街道上每个房屋和所有者的数据。

它的工作方式是试图加入每个房子,并在同一条街上的房子与另一个所有者拥有。如果加入失败,则意味着在同一条街道上没有其他拥有不同所有者的房屋。