【问题标题】:How can I delete multiple rows from a table in SQLite如何从 SQLite 中的表中删除多行
【发布时间】:2017-08-08 12:57:52
【问题描述】:

我有一个这样的子查询:

SELECT INTER1.LID1 AS ILID1,INTER1.LID2 AS ILID2 FROM
(SELECT L1.ID1 AS LID1, L1.ID2 AS LID2 FROM Friend F1
INNER JOIN Likes L1
ON F1.ID1 = L1.ID1 AND F1.ID2 = L1.ID2) INTER1
LEFT JOIN Likes L2
ON (INTER1.LID1 = L2.ID2 AND INTER1.LID2 = L2.ID1)
WHERE (L2.ID1 IS NULL AND L2.ID2 IS NULL)

这个的输出如下:

     ID1    ID2

    1641    1468
    1911    1247

现在我必须从 LIKES 表中删除这两行,其格式如下:

  ID1       ID2

 1689       1709
 1709       1689
 1782       1709
 1911       1247
 1247       1468
 1641       1468

我尝试在 SQLite 中使用以下查询来完成此操作:

DELETE FROM Likes 
WHERE EXISTS 
(SELECT INTER1.LID1 AS ILID1,INTER1.LID2 AS ILID2 FROM
(SELECT L1.ID1 AS LID1, L1.ID2 AS LID2 FROM Friend F1
INNER JOIN Likes L1
ON F1.ID1 = L1.ID1 AND F1.ID2 = L1.ID2) INTER1
LEFT JOIN Likes L2
ON (INTER1.LID1 = L2.ID2 AND INTER1.LID2 = L2.ID1)
WHERE (L2.ID1 IS NULL AND L2.ID2 IS NULL));

但它没有按预期工作,它不只删除那些行。

然后我尝试使用 INNER JOIN 解决这个问题,但是 SQLite 中没有 INNER JOIN 与 DELETE 函数相关的功能。

我怎样才能使这项工作。

请帮忙

【问题讨论】:

    标签: sqlite subquery sql-delete


    【解决方案1】:

    一次比较两个值:

    DELETE FROM Likes
    WHERE (ID1, ID2) IN (SELECT ... your original query ...);
    

    Row values 需要 SQLite 3.15 或更高版本。 如果您使用的是早期版本,则必须在单独的步骤中使用单列主键(rowid,或您声明为 INTEGER PRIMARY KEY 的任何内容)查找要删除的行:

    DELETE FROM Likes
    WHERE rowid IN (SELECT Likes.rowid
                    FROM Likes
                    JOIN (SELECT ... your original query ...) AS IDs
                      ON Likes.ID1 = IDs.ILID1
                     AND Likes.ID2 = IDs.ILID2);
    

    【讨论】:

    • 我正在在线上斯坦福拉古尼塔 SQL 课程,似乎他们正在使用指定之前的 SQLite 版本来完成这项工作。有没有替代方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    相关资源
    最近更新 更多