2010-04-04 82 views
1

我有屬於街道的房屋。用戶可以購買幾棟房子。如果用戶擁有整條街道,我怎麼知道?sql query question/count

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] 

到目前爲止,我使用的計數返回結果:

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

努力理解您的問題,請考慮重新說明最終問題。 – Nix 2010-04-04 13:51:02

回答

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 
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 

在這種情況下,「擁有一個完整的街道」,意味着其他所有人擁有在同一條街上的房子。這也假定你有街道上每個房屋和業主的數據。

它的工作方式是嘗試將每棟房屋與不同所有者擁有的同一條街道上的房屋連接起來。如果加入失敗,這意味着在同一條街上沒有其他房屋擁有不同的所有者。