Как мне сделать этот простой оператор SQL SELECT? - PullRequest
1 голос
/ 09 декабря 2010

У меня проблемы с тем, что, по моему мнению, должно быть самым простым из операторов SQL, однако оно не работает для меня ...

У меня есть 4 таблицы: S, P, J и SPJ, где SPJв основном это таблица, связывающая все идентификаторы вместе.

Теперь требуется следующее утверждение: «Получить номера поставщиков для поставщиков, которые поставляют деталь P2 и деталь P4».

SELECT SNO FROM SPJ WHERE PNO = 'P2' AND PNO = 'P4'
- не возвращает результатов (что неверно)

SELECT SNO FROM SPJ WHERE PNO = 'P2' UNION SELECT SNO FROM SPJ WHERE PNO = 'P4'
- возвращает результат плюс дополнительный, который предоставляет только один из двух ...

Я перепробовал всеманера высказываний, но не могу понять, я знаю, что это должно быть просто, но я просто не вижу этого ...

У кого-нибудь есть идеи?

Приветствия

Ответы [ 5 ]

5 голосов
/ 09 декабря 2010

Это даст вам поставщиков, которые поставляют обе детали, в отличие от тех, кто поставляет или / или.

select sno
    from spj
    where pno in ('P2','P4')
    group by sno
    having count(distinct pno) = 2
2 голосов
/ 09 декабря 2010

Или как альтернатива @ Сатья

SELECT SNO 
FROM SPJ 
WHERE PNO = 'P2'
OR PNO = 'P4'
1 голос
/ 09 декабря 2010
SELECT SNO FROM SPJ WHERE PNO in ('P2','P4')
0 голосов
/ 09 декабря 2010

"ВЫБЕРИТЕ SNO ИЗ SPJ, ГДЕ PNO = 'P2' И PNO = 'P4'"

очевидно, что PNO не может быть одновременно P2 и p4. Трудно ответить на ваш вопрос, не зная схемы БД, вы должны дать описание ваших таблиц.

0 голосов
/ 09 декабря 2010

Лучше использовать ИЛИ

SELECT SNO FROM SPJ WHERE PNO = 'P2' OR PNO= 'P4'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...