-1

我有一个表,其中包含一个 ID 列和一个父 ID 列:

id |parentID
------------
 1 |  1
 2 |  1
 3 |  3
 4 |  3
 5 |  5
 6 |  5

所以基本上有一个条目id = parentID和一些条目,parentID其中一个ID来自其他行。有时带有的条目parentID <> id会丢失,但id = parentID始终存在。我的目标是找到所有id = parentID没有相应条目的id <> parentID条目。如何在 Firebird 1.5 中完成?谢谢!

4

1 回答 1

1

您可以像处理任何其他表格一样执行此操作:left join表格(这次是表格本身)并检查null(缺失的行)。

db<>fiddle上查看

select rdb$get_context('SYSTEM', 'ENGINE_VERSION') as version
     , rdb$character_set_name
from rdb$database;
版本 | RDB$CHARACTER_SET_NAME                                                                                                      
:-------- | :------------------------------------------------ -------------------------------------------------- ----------------------
3.0.5 | UTF8                                                                                                                        
create table pool( id integer primary key, parentID integer not null)
insert into pool
select 1, 1 from rdb$database union all
select 2, 1 from rdb$database union all
select 3, 3 from rdb$database union all
select 4, 3 from rdb$database union all
select 5, 5 from rdb$database union all
select 6, 5 from rdb$database union all
select 7, 7 from rdb$database 
7 行受影响
select * from pool
身份证 | 家长编号
-: | --------:
 1 | 1
 2 | 1
 3 | 3
 4 | 3
 5 | 5
 6 | 5
 7 | 7
select p1.* from pool p1
left join pool p2
  on (p2.parentid = p1.parentid) and (p2.parentid <> p2.id)
where (p1.parentid = p1.id)
 and (p2.id is null)
身份证 | 家长编号
-: | --------:
 7 | 7
select p1.* from pool p1
left join pool p2
  on (p2.parentid = p1.id) and (p2.parentid <> p2.id)
where (p1.parentid = p1.id)
 and (p2.id is null)
身份证 | 家长编号
-: | --------:
 7 | 7
于 2020-11-17T09:18:44.907 回答