2011-04-25 58 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

相关问题