【问题标题】:How to use CTE's with update/delete on SQLite?如何在 SQLite 上使用 CTE 和更新/删除?
【发布时间】:2014-02-17 01:17:44
【问题描述】:

SQLite 现在有 CTE,documentation 表示您可以将它用于插入、更新和删除查询——但只提供了选择语句的示例。

我可以通过 insert-select 弄清楚 CTE 如何应用于插入;但是我们如何在没有 from 子句的更新或删除中使用它们?

【问题讨论】:

    标签: sql sqlite sql-update common-table-expression


    【解决方案1】:

    CTE 可用于子查询:

    WITH NewNames(ID, Name) AS (...)
    UPDATE MyTable
    SET Name = (SELECT Name
                FROM NewNames
                WHERE ID = MyTable.ID);
    
    WITH IDsToDelete AS (...)
    DELETE FROM MyTable
    WHERE ID IN IDsToDelete;
    

    【讨论】:

    • 真的没有更好的使用 CTE 的方法吗?
    【解决方案2】:

    在 SQlite 3.15.0 及更高版本中使用 CTE 的另一种更简洁的方式。

    WITH t (id, name, nickname) AS (VALUES (1, "bob", "bobby"), (2, "john", "johnny"))
    UPDATE user
    SET (name, nickname) = (
        SELECT name, nickname
        FROM t WHERE user.id = t.id
    )
    WHERE id IN (SELECT id FROM t)
    

    非常适合作为批量更新!

    【讨论】:

      猜你喜欢
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 2021-08-18
      相关资源
      最近更新 更多