代码:
create table coltype (coltype varchar(5));
insert into coltype values ('typ1');
create table colsubtype (coltype varchar(5), colsubtype varchar(5));
insert into colsubtype values ('typ2', 'st1');
insert into colsubtype values ('typ2', 'st2');
create table table1 (col1 varchar(5), coltype varchar(5), colsubtype varchar(5));
insert into table1 values ('val1','typ1', 'st1');
insert into table1 values ('val2','typ1', 'st2');
insert into table1 values ('val3','typ1', 'st3');
insert into table1 values ('val4','typ2', 'st1');
insert into table1 values ('val5','typ2', 'st2');
insert into table1 values ('val6','typ2', 'st3');
insert into table1 values ('val7','typ3', 'st1');
insert into table1 values ('val8','typ3', 'st2');
insert into table1 values ('val9','typ3', 'st3');
commit;
基本上,我想删除coltype
和colsubtype
表中未提及coltype
和colsubtype
的所有记录。
我该怎么做。以下是我考虑采取的路径,但它不起作用 - 而且 - 它似乎不是一个好的设计。
delete from table1
where coltype != (select coltype from coltype)
OR not (coltype = cst.coltype and colsubtype = cst.colsubtype
from (select coltype, colsubtype from colsubtype) cst)
答案 0 :(得分:8)
使用NOT EXISTS:
delete from t1
from table1 t1
where not exists (select null from coltype ct where ct.coltype = t1.coltype)
or not exists (select null from colsubtype cst where cst.colsubtype = t1.colsubtype)
使用LEFT JOIN:
delete from t1
from table1 t1
left join coltype ct
on t1.coltype = ct.coltype
left join colsubtype cst
on t1.colsubtype = cst.colsubtype
where ct.coltype is null
or cst.colsubtype is null
答案 1 :(得分:2)
试一试
delete from table1
where not exists
(
select *
from coltype
where table1.coltype = coltype.coltype
)
and not exists
(
select *
from colsubtype
where table1.coltype = colsubtype.coltype
and table1.colsubtype = colsubtype.colsubtype
)
答案 2 :(得分:0)
您的代码需要非常重视“不存在”运算符
delete from table1
where not exists
(
select 1 from colType ct where ct.colType = table1.colType
)
and not exists
(
select 1 from colsubtype cst where cst .colSubType = table1.colSubType
)
答案 3 :(得分:0)
DELETE FROM table1
WHERE coltype IN
(SELECT coltype
FROM table1
WHERE coltype NOT IN (SELECT coltype FROM coltype))
OR colsubtype IN
(SELECT colsubtype
FROM table1
WHERE colsubtype NOT IN (SELECT colsubtype FROM colsubtype))