コードを削除しますは、複数のテーブルに参加
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)
悪いサンプルデータ? 'colsype'テーブルへの挿入で' typ2 'を 'coltype'として参照しますが、その値を' coltype'テーブルに挿入しませんでした。 –