SQL基于单个字段选择

时间:2011-04-25 10:07:30

标签: sql sql-server-2008

以下是来自两个不同表的外键的数据库表的结构。

         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 roomID from room_facility where facilityID = '1' and facilityID = '3'

所以它给了我一个房间,这个房间有两个设施组合在这种情况下roomID“B.0.0.1”,但上面的SQL返回空表。我尝试使用'OR'而不是'AND',但是这给了我roomID“A.0.0.1”和“B.0.0.1”这两个都不是我想要的,因为房间“A.0.0。 1“没有设施”3“。

我不知道我是否在这里犯了任何基本的基本错误,但无论是SQL语言,还是SQL Server存储过程中的一种方法,或者表格的重新设计,任何指导都会非常有用。

感谢。

2 个答案:

答案 0 :(得分:1)

为每一行评估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

答案 1 :(得分: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*/