以下是来自两个不同表的外键的数据库表的结构。
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存储过程中的一种方法,或者表格的重新设计,任何指导都会非常有用。
感谢。
答案 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*/