2017-12-29 8 views
3

Ich habe eine selbst verweisende Tabelle mit Inhalt wie folgt aus: Demo here selbst verweisElternTabelleerhalten alle Datensatz ohne Kind und nicht zugeordnet Eltern in selbst referenzierenden Tabelle? - SQL

emp_id man_id(FK of emp_id or ParentID) 
    --------------------- 
    1 (null) 
    2 (null) 
    3 (null) 
    4 2 
    5 2 
    6 3 
    7 3 
    8 1 
    9 (null) 
    10 (null) 
    11 (null) 

mir helfen Whit SQL-Anweisung für: (emp_id, die keine Beziehungen haben)

emp_id 
----- 
9 
10 
11 

Demo here

Vielen Dank im Voraus

+0

Oracle oder SQL Server? Das sind zwei sehr unterschiedliche DBMS –

Antwort

2

Versuchen Sie so;

select e.emp_id from emp e where 
e.man_id is null and e.emp_id 
not in (select distinct man_id from emp where man_id is not null) 

Eine andere Option ist left join;

select e.emp_id from emp e 
left join emp e2 ON e.emp_id = e2.man_id 
where e2.man_id is null and e.man_id is null 
0

Sie können LEFT JOIN verwenden, um die Datensätze zu finden, die nicht referenziert werden als man_id

select e.emp_id, e.man_id from emp e 
    left outer join emp e1 on e1.man_id = e.emp_id 
    where e1.emp_id is null 

Wenn Sie auch die Ergebnisse einschränken wollen, so dass der emp_id, können Sie keine man_id haben:

select e.emp_id, e.man_id from emp e 
    left outer join emp e1 on e1.man_id = e.emp_id 
    where e1.emp_id is null and e.man_id is null 
-1

Versuchen Sie folgendes:

select emp_id from TABLE_NAME where emp_id not in 
(
    select emp_id from TABLE_NAME where man_id is not null 
    union all 
    select man_id from TABLE_NAME where man_id is not null 
) 
0

Sie können zwei Regeln gesorgt werden -
1. Wenn ein emp_id ist in man_id Spalte, sollte es aus den Ergebnissen
2. ausgeschlossen werden, wenn ein emp_id einige man_id ihm zugeordnet hat, sollte es sein Aus den Ergebnissen ausgeschlossen

Dies kann mit einer linken Join on Self durchgeführt werden.

SELECT A.EMP_ID 
FROM 
EMP A LEFT JOIN EMP B 
ON A.EMP_ID = B.MAN_ID 
WHERE A.MAN_ID IS NULL AND B.MAN_ID IS NULL; 

Die erste WHERE Bedingung der Regel kümmern 1 und zweite WHERE kümmern Regel 2.

Verwandte Themen