我有一个非常复杂的选择,它返回一个id的数组。我现在想使用这个id
数组DELETE FROM cart_items WHERE id in (
SELECT id AS the_count
FROM cart_items
GROUP BY session_code
HAVING COUNT(session_code) > 100
);
我想做的是使用内部选择(有效)和数组进行IN删除......
此代码抛出错误:
“您无法在FROM子句”
中为更新指定目标表'cart_items'答案 0 :(得分:1)
使用子选择尝试此选项并提供新别名
DELETE FROM cart_items WHERE id in (
SELECT cart_items_todelete.id FROM (
SELECT id
FROM cart_items
GROUP BY session_code
HAVING COUNT(session_code) > 100
) cart_items_todelete
);
答案 1 :(得分:0)
我真的很想知道你是不是应该使用这样的查询吗?
DELETE FROM cart_items WHERE id IN (
SELECT c.id FROM (
SELECT a.id AS id FROM
cart_items a, (
SELECT session_code
FROM cart_items
GROUP BY session_code
HAVING COUNT(session_code) > 100
) b
WHERE
a.session_code = b.session_code
) c
);
您的查询以及此处答案中建议的一次不会计算ID可能不同的计数。对于同一个会话,它并不总是相同的ID,对吧!
你会
all
个ID 希望这是你想要达到的目标。
答案 2 :(得分:0)
您是否考虑过使用EXISTS条款:
DELETE
FROM cart_items TGT
WHERE EXISTS
(SELECT 'x'
FROM cart_items SRC
WHERE SRC.session_code = TGT.session_code
GROUP BY session_code
HAVING COUNT(session_code) > 100
);