首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何重写DELETE查询,以便限制受影响的行?

如何重写DELETE查询,以便限制受影响的行?
EN

Stack Overflow用户
提问于 2013-01-23 00:59:01
回答 4查看 212关注 0票数 2

我知道mysql不允许对多个表删除查询使用限制。我已经在网上寻找了一个解决方案,但我不确定如何使它们适应我的需求。下面的查询删除了所有不在内容中的内容,以保留表和其他条件。

代码语言:javascript
复制
DELETE f
    FROM   field_data_body f
           INNER JOIN node n
                   ON f.entity_id = n.nid
           LEFT JOIN content_to_keep k
                  ON n.nid = k.nid
    WHERE  n.type = 'article'
           AND k.nid IS NULL

那么,我有哪些选项可以添加一个限制参数。

编辑:谢谢你的帮助,但大多数答案都使用了where in子句。当我使用它时,我得到一个错误,说“这个版本的MySQL还不支持'LIMIT &IN/ALL/ANY/SOME‘子查询’”

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-23 01:13:36

在选择要删除的行的代码部分添加ORDER BYLIMIT,然后将其放入派生表中并连接回要删除的表:

代码语言:javascript
复制
DELETE f_del
FROM field_data_body AS f_del
   JOIN
      ( SELECT f.PK                            --- the Primary Key of the table
        FROM   field_data_body f
               INNER JOIN node n
                       ON f.entity_id = n.nid
               LEFT JOIN content_to_keep k
                      ON n.nid = k.nid
        WHERE  n.type = 'article'
               AND k.nid IS NULL
        ORDER BY some_column
        LIMIT 100
      ) AS tmp
      ON tmp.PK = f_del.PK ; 
票数 2
EN

Stack Overflow用户

发布于 2013-01-23 01:07:03

代码语言:javascript
复制
DELETE
FROM   field_data_body
WHERE id in (
    SELECT f.id
    FROM   field_data_body f
           INNER JOIN node n
                   ON f.entity_id = n.nid
           LEFT JOIN content_to_keep k
                  ON n.nid = k.nid
    WHERE  n.type = 'article'
           AND k.nid IS NULL)
LIMIT 10; --or whatever you want
票数 2
EN

Stack Overflow用户

发布于 2013-01-23 01:04:51

也许是为了让你走上正确的方向:

……WHERE IN (SELECT ...从nid为空的field_data_body )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14463930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档