将select转换为DELETE FROM的数组

时间:2013-09-22 10:39:59

标签: mysql sql where

我有一个非常复杂的选择,它返回一个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'

3 个答案:

答案 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,对吧!

你会

  • 首先找到出现次数超过100次的会话代码
  • 查找包含此会话代码的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
      );