2012-03-26 55 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