2012-03-26 16 views
0

SQL Server 2008のSQLサーバー[クエリ+複数の結合条件]

こんにちは

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) 

以下のような建物はので、私のクエリは

復帰割り当てられた項目が0にされ、構造は以下の通りです数= 1

テーブルを構築することにより、部屋をフィルタリング部屋のテーブルからroomidになります - ONLY ESSENTIAL FIELDSが

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

に示す。あなたは何のアイテムを持っていない部屋を見つけ、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はそれを見て持つことができますか? –

+0

私は自分の答えを更新しました。 –

+0

それは素晴らしい、ありがとうたくさん働いた:) –

関連する問題