【问题标题】:Delete Rows based on another table with key having multiple columns基于具有多列键的另一个表删除行
【发布时间】:2013-07-10 17:39:28
【问题描述】:

有很多关于基于另一个表删除表记录的查询。但其中没有一个不适用于我的场景。

我正在使用 sqlite3

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

DB1:

CREATE TABLE OwnerService1Table1 ("key1" TEXT,"key2" TEXT, "nonkey1" TEXT,"nonkey2" TEXT,PRIMARY KEY("key1","key2"));

记录

Key1    Key2    NonKey1 NonKey2
-------------------------------
AA1     BB1         CC1     DD1
AA2     BB2         CC2     DD2

DB2:

CREATE TABLE OwnerService1Table1 ("key1" TEXT,"key2" TEXT, "key3" TEXT default "KDEF","nonkey1" TEXT,"nonkey2" TEXT,PRIMARY KEY("key1","key2","key3"));

记录

Key1    Key2  Key3    NonKey1 Nonkey2
------------------------------------
AA1     BB1   New1    CC12    DD12
AA3     BB3   New2    CC3     DD3
AA4     BB4   New3    CC4     DD4

(我用attach,打开DB2,attach DB1)

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

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

【问题讨论】:

    标签: sqlite delete-row


    【解决方案1】:

    我假设您的意思是从 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)
    

    【讨论】:

    • 是的...存在的地方对我有用。在 sqlite3 中我的主要问题是我无法提供别名,例如从 db2 T 中删除。我不得不使用 where exists.... 感谢您的解决方案
    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多