2017-12-29 12 views
3

私はこのような内容で自己参照テーブルを持っている: Demo here 自己参照の親テーブル子なしですべてのレコードを取得し、親を自己参照テーブルにマップしていないか? - 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) 

ヘルプ私にとっては聖霊降臨祭のSQL文:(任意の関係を持っていないEMP_ID)

事前に
emp_id 
----- 
9 
10 
11 

Demo here

おかげ

+0

OracleまたはSQL Serverのの世話をするルール1と第2 WHEREの世話をするのだろうか?それらは2つの非常に異なるDBMSです –

答えて

2

このようにしてみてください。

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) 

もう1つのオプションは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

あなたはまた、EMP_IDがman_idを持たないように、あなたが行うことができます結果を制限したい場合は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 

として参照されていないレコードを検索するLEFT JOINを使用することができます。

​​
-1

これを試してみてください:

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 
) 
man_id列に存在する場合、 emp_idがそれにマッピングされたいくつかの man_idを持っている場合は、それがあるべき結果
2から
1.除外すべきである - あなたは二つの規則の世話をすることができます
0

結果から除外されます

これは、自己への左結合を使用して実行できます。

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; 

最初WHERE条件は、ルール2

関連する問題