开发者

SQL Select based on a single field

The following is the structure of database table consisiting of foreign keys from two different tables.

         facilityID     roomID
            1           A.0.0.1
            2           A.0.0.1
            1           B.0.0.1
            2           B.0.0.1
            3     开发者_JAVA技巧      B.0.0.1

What I would like to do is perform a select statement something like

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

so that it gives me back a room which has both facilities combined in this case roomID "B.0.0.1" but the above SQL returns empty table. I have tried using 'OR' instead of 'AND' but but that gives me roomID "A.0.0.1" and "B.0.0.1" both which isn't what I am looking for because room "A.0.0.1" doesn't have facility "3".

I don't know if I am making any basic fundamental mistake over here but any guidance would be very helpful whether it is with SQL, a way to do it in SQL Server Stored Procedure or redesigin of the table's.

Thanks.


A where clause is evaluated for every row. No row can satisfy facilityID = '1' and facilityID = '3' at the same time.

One approach is a group by. You can use count(distinct facilityID) to ensure both rooms are found:

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


This is a Relational Division problem.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜