Oracle SQL, правильно ли я делаю JOIN самого себя?

Здравствуйте! Есть таблица MSEG следующего вида, где MBLNR – часть составного ключа, а BWART – простое поле:
+--------+-------+
| MBLNR  | BWART |
+--------+-------+
| 000001 |   531 |
| 000001 |   561 |
| 000001 |   591 |
| 000002 |   531 |
| 000002 |   591 |
+--------+-------+

Необходимо выбрать все MBLNR, для которых поле BWART принимает значения 531, 561 и 591 – обязательно все три.
Таким образом, 000001 должен попасть в результат, а 000002 – не должен (нет BWART = 561).

Для этого я написал следующий код:
SELECT A.MBLNR

FROM MSEG A
   , MSEG B
   , MSEG C

WHERE

  A.MBLNR = B.MBLNR AND
  A.MBLNR = C.MBLNR AND

  A.BWART = '531' AND
  B.BWART = '561' AND
  C.BWART = '591'
  
  AND ROWNUM <= 10

Принесёт ли мне это желаемый результат? Может быть, есть способ лучше?
  • Вопрос задан
  • 2605 просмотров
Решения вопроса 1
@faustxp
как вариант

select count(bwart), mblnr
from
(select distinct mblnr, bwart 
from mseg
where bwart in ('531', '561', '591'))
group by mblnr
having count(bwart) = 3


Но, Ваш вариант, так же верен, и, возможно, работать будет быстрее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы