Oralce SQL вложенное или внутреннее соединение, когда вам нужно сравнить одну и ту же таблицу, но разные строки с уникальными значениями идентификаторов - PullRequest
0 голосов
/ 10 сентября 2018

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

ID  quantity partID 
123   50       10
100   20       10
100   30       11
123   null     8
456   null     100
789   25       123
456   50       9

Я хочу получить все строки, которые имеют одинаковый идентификатор, но количество должно быть 50 и ноль (точно такие же пары 50 и только ноль).для данного примера я хотел бы получить:

ID  quantity partID 
123   50       10
123   null     8
456   50       9
456   null     100

Я пробовал внутреннее соединение, но оно не дает точного результата, как ожидалось.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Вы можете использовать exists:

select t.*
from t
where (t.quantity = 50 and
       exists (select 1 from t t2 where t2.id = t.id and t2.partid = t.partid and t2.value is null)
      ) or
      (t.quantity is null and
       exists (select 1 from t t2 where t2.id = t.id and t2.partid = t.partid and t2.value = 50)
      ) ;
0 голосов
/ 10 сентября 2018

Вы можете попробовать:

select ID, quantity, partID
  from tab
 where ID in
(
 select ID
  from tab
 where nvl(quantity,50)=50
 group by ID
 having count(distinct nvl(quantity,0) )>1
);

ID  QUANTITY    PARTID
123    50         10
123   (null)       8
456   (null)     100
456    50          9

Демонстрация SQL Fiddle

PS вы можете получить те же результатыкомментируя having count(ID)=2 также, но для этих случаев может не существовать одно из 50 или null для значений количества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...