2013-09-05 161 views
0

我有一個表「房子」與內部ID,一張桌子「房間」與房間ID,並且這兩個表的關係表MySQL的查詢條件對相關表

HOUSE 
----- 
1 | house1 
2 | house2 
3 | house3 
4 | house4 
5 | house5 

ROOM 
------ 
1 | kitchen 
2 | bathroom 
3 | garage 

HOUSE_ROOMS 
------------ 
id | house_id | room_id | size 
================================= 

1 | 1 | 1 | 200 
2 | 1 | 2 | 300 
3 | 2 | 1 | 400 
4 | 2 | 2 | 500 
5 | 3 | 1 | 500 
6 | 4 | 2 | 600 
7 | 5 | 1 | 400 
8 | 5 | 5 | 300 

我有麻煩編寫某些組合條件返回家ID的陣列的查詢:

例如:獲取所有房屋設有廚房350和450之間的尺寸和450和550 之間的浴室尺寸 - >結果應該是一個數組含house2

有人知道h我應該寫這個查詢嗎?

+0

你爲什麼實施了許多一對多的關係?一個房間可以屬於很多房子嗎?我猜不會。那麼,你的關係應該是1對多的,因此,只需要在'room'表中的一個字段'house_id'。 –

+0

好吧,這是我的數據庫的一個簡化版本,可以過濾出與我的問題無關的東西。它仍然需要一個多對多的關係,因爲其他原因,在這篇文章中沒有提到 –

回答

1

假設所有的ID是固定的,下面的快速查詢將工作:

SELECT HOUSE_ID 
    FROM HOUSE_ROOMS 
    WHERE (ROOM_ID=2 AND SIZE>=450 AND SIZE<=550) 
    OR (ROOM_ID=1 AND SIZE>=350 AND SIZE<=450) 
    GROUP BY HOUSE_ID 
HAVING COUNT(DISTINCT ROOM_ID)>1 
+0

此查詢返回包含2個有效條件和0個浴室的房屋,所以我認爲HAVING COUNT(*)> 2並不夠嚴格 –

+0

已經編輯查詢,以應付這個通過計數房間ID – noz

+0

檢查了你的編輯,它工作正常,所以+1這個職位!我找到了另一種方法,因爲我使用的算法將where-conditions添加到從house表中獲取id的查詢中。添加'存在(SELECT * FROM house_rooms WHERE ...)'爲我做了詭計 –