Распечатать не имеющих ссылки сирот из одного стола - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть таблица (oracle база данных, если это важно), которая выглядит следующим образом:

NAME        VALUE
parent.1    aa1234
parent.2    bb1234
child.3H    hh1234
child.2B    bb1234
child.6P    oo6666
parent.3    hh1234
child.1A    aa1234
child.5K    ee9999
child.2C    bb1234
child.1A    aa1234
child.3G    hh1234

Таблица содержит родителей и детей в довольно случайном порядке. Они ссылаются друг на друга по столбцу VALUE. Родитель имеет то же строковое значение, что и дочерний. Родители, как правило, имеют одного или нескольких дочерних элементов, поэтому значение родительского элемента и его дочерних элементов будет точно таким же. like '%child%'. И столбцы NAME и VALUE имеют значение NVARCHARS2(255).

Я пытаюсь найти сирот - детей, у которых по значению нет родителя (в примере child.6p и child.5K ). Это возможно в одном запросе или скрипте?

Ответы [ 2 ]

1 голос
/ 07 апреля 2020
select * from tab C
where NAME  LIKE ('child%')
AND NOT EXISTS 
( SELECT 1 FROM TAB P WHERE 
 P.NAME LIKE ('parent%') 
 AND C.VAL = P.VAL
 )

SQL Fiddel Demo

1 голос
/ 07 апреля 2020

Вы можете использовать not exists следующим образом:

SELECT T.NAME, T.VALUE
  FROM YOUR_TABLE T
 WHERE T.NAME LIKE '%child%'
   AND NOT EXISTS (SELECT 1 
                     FROM YOUR_TABLE T1
                    WHERE T1.NAME LIKE '%parent%'
                      AND T.VALUE = T1.VALUE);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...