gpt4 book ai didi

mysql - DELETing w/Using 时限制删除的记录

转载 作者:可可西里 更新时间:2023-11-01 08:18:18 25 4
gpt4 key购买 nike

我通过将多个列移动到它们自己的表并改用外键来规范化数据库。我正在尝试更新应用程序中的查询以尽可能使用联接。在删除数据的查询中,我不希望查找键值而只是运行带有连接的删除。我发现唯一可行的方法是将 USING 添加到查询中 - 但这会破坏我对 LIMIT 子句的使用。

DELETE FROM prism_data
USING prism_data
INNER JOIN prism_players p ON p.player_id = prism_data.player_id
INNER JOIN prism_actions a ON a.action_id = prism_data.action_id
WHERE (a.action = 'water-flow')
LIMIT 5000; <--- Was ok before the using/joins were added

我正在尝试以 5,000 个为一组进行删除。如何修改查询以使限制仍然有效?

最佳答案

不幸的是,根据文档,LIMIT 子句仅对单个表 DELETE 有效:

Single-table syntax:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

Multiple-table syntax:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
[WHERE where_condition]

Or:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM tbl_name[.*] [, tbl_name[.*]] ...
USING table_references
[WHERE where_condition]

http://dev.mysql.com/doc/refman/5.0/en/delete.html


另一方面,允许子查询。也许您可以将您的查询重构为以下形式?

DELETE FROM prism_data
WHERE .... IS IN (SELECT ....)
LIMIT 5000

关于mysql - DELETing w/Using 时限制删除的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com