【问题标题】:Count deleted records after a DELETE计算 DELETE 后删除的记录
【发布时间】:2016-07-07 17:08:22
【问题描述】:

我尝试计算在DELETE 命令之后将删除多少条记录:

SELECT COUNT(*) FROM BOXES
WHERE EXISTS  ( 
    DELETE FROM BOXES WHERE product='25043620' AND Order='0846'
)

我在删除附近遇到语法错误,但我不知道是哪个。

【问题讨论】:

标签: sqlite sql-delete


【解决方案1】:

经过一番挖掘,我想通了……之后

DELETE FROM BOXES WHERE product='25043620' AND Order='0846'

我要求数据库更改:

SELECT changes()

我知道有多少行被删除。

【讨论】:

    【解决方案2】:

    我认为您不能将计数和删除结合起来。单独做。

    这里是示例:-

    示例 - 使用 SQL EXISTS 子句

    您还可以执行更复杂的删除。

    您可能希望根据另一个表中的值删除一个表中的记录 桌子。由于不能在 SQL FROM 子句中列出多个表 执行删除时,可以使用 SQL EXISTS 子句。

    例如:

    DELETE FROM suppliers
    WHERE EXISTS
      ( SELECT customers.customer_name
        FROM customers
        WHERE customers.customer_id = suppliers.supplier_id
        AND customers.customer_name = 'IBM' );
    

    此 SQL DELETE 示例将删除供应商中的所有记录 客户表中有一条记录的表,其名称为 IBM,customer_id与supplier_id相同。

    如果您想确定要删除的行数,您可以 可以在执行之前运行以下 SQL SELECT 语句 删除。

    SELECT COUNT(*) FROM suppliers
    WHERE EXISTS
      ( SELECT customers.customer_name
        FROM customers
        WHERE customers.customer_id = suppliers.supplier_id
        AND customers.customer_name = 'IBM' );
    

    来自SQL: DELETE Statement

    【讨论】:

      【解决方案3】:

      您可以尝试将语句放入以参数为循环条件的循环中,然后让循环在递增时为您计数。

      【讨论】:

        【解决方案4】:

        对于那些为 SQLServer 来到这里的人 - 你会使用:

        SET NOCOUNT OFF
        DELETE FROM BOXES WHERE product='25043620' AND Order='0846'
        SELECT @@ROWCOUNT
        

        我不确定这是否适用于 SqlLite,但如果有人可以确认会很酷:)

        【讨论】:

        • 这对于 SQLite 来说并不常见。
        • 啊,谢谢@forpas - 将修改我对 SQL Server 的评论。没有意识到这是针对 SQLLite 的,因为它不在标题或描述中!
        • 问题被标记为sqlite ;)
        【解决方案5】:

        我也有这个问题,但我使用的是 C 库。有一个函数可以为您提供:https://www.sqlite.org/c3ref/changes.html。

        这是我做的……

            // using String = std::string;
            // execute: runs the query
            uint32_t Db::executeWithCount(const String& query) {
                uint32_t count = 0;
                if(execute(query, detail::empty_callback, nullptr)) {
                    // number of rows affected by most recent INSERT, UPDATE or DELETE
                    count = sqlite3_changes(_db);
                }
        
                return count;
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多