2011-04-25 56 views
2

以下是來自兩個不同表的外鍵的數據庫表結構。SQL根據單個字段選擇

  facilityID  roomID 
      1   A.0.0.1 
      2   A.0.0.1 
      1   B.0.0.1 
      2   B.0.0.1 
      3   B.0.0.1 

我想什麼做的是執行SELECT語句類似

  Select roomID from room_facility where facilityID = '1' and facilityID = '3' 

所以,它給我回它既有設施相結合在這種情況下,一個房間roomID「B.0.0.1 「但上面的SQL返回空表。我曾嘗試使用'OR'而不是'AND',但是,由於房間爲「A.0.0」,所以房間ID分別爲「A.0.0.1」和「B.0.0.1」,這並不是我正在尋找的。 1「沒有設施」3「。

我不知道我是否在這裏犯了任何基本的基本錯誤,但是任何指導都會對SQL非常有幫助,無論是SQL Server存儲過程還是表格的重新設計。

謝謝。

回答

1

A where子句針對每一行進行評估。沒有一行可以同時滿足facilityID = '1'facilityID = '3'

一種方法是一組。您可以使用count(distinct facilityID)來確保找到兩個房間:

select roomID 
from room_facility 
where facilityID in ('1','3') 
group by 
     roomID 
having count(distinct facilityID) = 2 
+0

嗨Andomar,上面的SQL爲我完成這項工作。這正是我正在尋找的。儘管從'group by'條款開始,我仍然試圖掌握它是如何工作的。無論如何,我可能有點谷歌搜索可能會幫助我理解它。謝謝。 – Nimesh 2011-04-25 10:42:42

0

這是一個Relational Division的問題。

SELECT roomID 
FROM room_facility 
WHERE facilityID IN ('1', '3') 
GROUP BY roomID 
HAVING COUNT(*) = 2 /*Assuming facilityID,roomID is a composite PK*/ 
+0

感謝您的鏈接Martin。我一定會經歷它。 – Nimesh 2011-04-25 10:42:51

相關問題