开发者

SQL Select based on a single field

开发者 https://www.devze.com 2023-02-28 18:26 出处:网络
The following is the structure of database table consisiting of foreign keys from two different tables.

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

精彩评论

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