gpt4 book ai didi

sql-server - 通过连接删除多个表

转载 作者:行者123 更新时间:2023-12-02 22:42:12 24 4
gpt4 key购买 nike

代码:

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)

最佳答案

使用 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)

使用左连接:

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

关于sql-server - 通过连接删除多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4649547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com