Как получить данные отношения один ко многим в oracle, используя sql? - PullRequest
0 голосов
/ 22 января 2020

У меня есть таблица, и существует множество данных. Существует связь между мемидом и другими столбцами в том, что мемид находится один на один с другими столбцами. Но я хочу найти случай, когда один и тот же мемид может иметь другое имя, фамилию и т. Д. c. Мой ожидаемый вывод выглядит следующим образом:

enter image description here

Здесь memid 1003,10008 связан с различными memfirstname и memlastname. Итак, я пробовал вот так:

select memid from ot.emp group by memid having count(distinct memfirstname)>1;
select memid from ot.emp group by memid having count(distinct memlastname)>1;
select * from ot.emp where memid in ('1003','10008');

Я получил вывод выше, используя запрос выше. Но мне нужно было использовать два разных запроса. Не могу ли я использовать (distinct memfirstname,memlastname)? Есть ли лучший запрос, чтобы получить результат сопоставления один ко многим?

1 Ответ

1 голос
/ 22 января 2020

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

select e.*
from ot.emp e
where exists (select 1 
              from ot.emp e1 
              where e1.memid = e.memid and 
                    (e.memfirstname <> e1.memfirstname or 
                     e.memlastname <> e1.memlastname
                    )
             );

Если вы хотите memid, которые идентичны обоим (memfirstname & memlastname), тогда используйте AND вместо OR в подзапрос.

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