Выбор SQL на основе одного поля - PullRequest
2 голосов
/ 25 апреля 2011

Ниже приведена структура таблицы базы данных, состоящей из внешних ключей из двух разных таблиц.

         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 возвращает пустую таблицу.Я попытался использовать 'ИЛИ' вместо 'И', но это дает мне roomID "A.0.0.1" и "B.0.0.1", и это не то, что я ищу, потому что комната "A.0.0.1 "не имеет возможности" 3 ".

Я не знаю, делаю ли я здесь какую-то фундаментальную ошибку, но любое руководство было бы очень полезно, будь то с SQL, способ сделать этов хранимой процедуре SQL Server или переопределении таблицы.

Спасибо.

Ответы [ 2 ]

1 голос
/ 25 апреля 2011

Предложение 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 голосов
/ 25 апреля 2011

Это проблема реляционного деления .

SELECT roomID
FROM   room_facility
WHERE  facilityID IN ( '1', '3' )
GROUP  BY roomID
HAVING COUNT(*) = 2  /*Assuming facilityID,roomID is a composite PK*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...