2012-03-26 47 views
0

SQL服務器2008SQL服務器[加入查詢+多重條件]

你好

這裏是我的查詢返回的結果

SELECT * FROM Rooms 
WHERE RoomID in 
(SELECT t1.RoomId FROM 
(Rooms t1 INNER JOIN 
(SELECT RoomID, SUM(quantity) AS QTY FROM Room_Item GROUP BY RoomID 
HAVING SUM(Quantity) = 0) t2 ON t1.RoomID = t2.RoomID)) 

上面寫的查詢將返回我的房間roomid其中沒有任何項目(數量= 0), ,但現在我想過濾掉建築物的結果,

我得到了特定房間的清單建築如下

select roomid from rooms where buildingblockid in (select buidingblockid from buildingblock where buildigID = 1) 

所以我的查詢將被

回報從房間表roomid在分配項目是0,通過建立數= 1

表結構如下濾除房間 - ONLY必要字段顯示

rooms => roomid(PK), buildingblockID(FK), roomname 
room_item => roomitemid(PK), roomid(FK), itemid(FK), quantity 
item => itemid(PK), itemname 
buildingblock => buildingblockid(PK), buildingID(FK) 
building => buildingID(PK), buildingName 

回答

1

您可以創建派生表發現沒有房間的物品,並將它加入到buildingWiseRoom過濾建築之一。

select buildingWiseRoom.roomID 
from buildingWiseRoom 
inner join 
(
    select RoomID 
    from Room_Item 
    group by RoomID 
    having SUM(Quantity) = 0 
) itemlessRooms 
    on buildingWiseRoom.roomID = itemlessRooms.roomID 
where buildingWiseRoom.buildingID = 1 

UPDATE如表結構發生變化:

select rooms.roomID 
from rooms 
inner join buildingblock 
    on rooms.buildingblockID = buildingblock.buildingblockID 
inner join 
(
    select RoomID 
    from Room_Item 
    group by RoomID 
    having SUM(Quantity) = 0 
) itemlessRooms 
    on rooms.roomID = itemlessRooms.roomID 
where buildingblock.buildingID = 1 
+0

喜,@Nikola,我已經更新了新添加的表更好地瞭解表結構,u能看看嗎? – 2012-03-26 08:39:15

+0

我已經更新了我的答案。 – 2012-03-26 08:47:50

+0

它工作得很好,非常感謝:) – 2012-03-26 08:54:41