MySQL的删除一个查询条件多行唯一的每一行
问题描述:
所以我知道在MySQL有可能在一个查询中插入多行,像这样:MySQL的删除一个查询条件多行唯一的每一行
INSERT INTO table (col1,col2) VALUES (1,2),(3,4),(5,6)
我想以类似的方式来删除多行。我知道这是可能的基础上删除的每一行完全相同的条件下多行,即
DELETE FROM table WHERE col1='4' and col2='5'
或
DELETE FROM table WHERE col1 IN (1,2,3,4,5)
但是,如果我想在一个查询删除多行,每行有一组独特的条件?像这样的东西将是我在找什么:
DELETE FROM table WHERE (col1,col2) IN (1,2),(3,4),(5,6)
有没有人知道的方法来做到这一点?还是不可能?
答
给出的答案略有扩展,所以希望对提问者和其他任何人都有用。
您还可以SELECT
您要删除的值。但要注意错误1093 - 您无法在FROM子句中指定更新的目标表。
DELETE FROM
orders_products_history
WHERE
(branchID, action) IN (
SELECT
branchID,
action
FROM
(
SELECT
branchID,
action
FROM
orders_products_history
GROUP BY
branchID,
action
HAVING
COUNT(*) > 10000
) a
);
我想删除单个操作/分支的历史记录数超过10,000的所有历史记录。感谢这个问题和选择的答案,我可以。
希望这是有用的。
Richard。
@amitkate,为什么不呢? – Pacerier 2015-04-09 14:09:20
请注意,在MySQL 5.6中,由于元组比较最终会进行表扫描,因此执行效果不佳。您应该更喜欢“WHERE(COL1 = 1 AND COL2 = 2)OR(COL1 = 3 AND COL2 = 4)...”以获得更好的性能。这固定在5.7。 – ep4169 2016-03-11 17:26:48
如果有人很好奇,这是在@ ep4169引用的5.7.3中修复的错误:https://bugs.mysql.com/bug.php?id=31188 – Kip 2017-02-09 20:26:49