删除基于另一个表的行,其键具有多列

Nas*_*sir 3 sqlite delete-row

有很多关于删除基于另一个表的表记录的查询。但它们都不适合我的场景。

我正在使用 sqlite3

我在 2 个数据库中有 2 个同名的表。

数据库1:

CREATE TABLE OwnerService1Table1 ("key1" TEXT,"key2" TEXT, "nonkey1" TEXT,"nonkey2" TEXT,PRIMARY KEY("key1","key2"));
Run Code Online (Sandbox Code Playgroud)

记录

Key1    Key2    NonKey1 NonKey2
-------------------------------
AA1     BB1         CC1     DD1
AA2     BB2         CC2     DD2
Run Code Online (Sandbox Code Playgroud)

数据库2:

CREATE TABLE OwnerService1Table1 ("key1" TEXT,"key2" TEXT, "key3" TEXT default "KDEF","nonkey1" TEXT,"nonkey2" TEXT,PRIMARY KEY("key1","key2","key3"));
Run Code Online (Sandbox Code Playgroud)

记录

Key1    Key2  Key3    NonKey1 Nonkey2
------------------------------------
AA1     BB1   New1    CC12    DD12
AA3     BB3   New2    CC3     DD3
AA4     BB4   New3    CC4     DD4
Run Code Online (Sandbox Code Playgroud)

(我使用attach,打开DB2并附加DB1)

我想删除 DB2.OwnerService1Table1 中的所有记录,其 Key1 和 Key2 与 DB1.OwnerService1Table1 相同

在这种情况下,应从 DB2.OwnerService1Table1 中删除包含 (AA1,BB1) 的行

Mic*_*her 5

我假设您的意思是从 DB2.OwnerService1Table1 中删除其 Key1 和 Key2 存在于 DB1.OwnerService1Table1 中的记录(在此组合中)。

为了简单起见,我将这两个表称为db1db2

那么声明是

delete from db2 where exists (select 1 from db1 where
    db1.key1 = db2.key1 and db1.key2 = db2.key2)
Run Code Online (Sandbox Code Playgroud)