Mysql 使用if-exist语句插入查询

Mysql 使用if-exist语句插入查询,mysql,Mysql,我有两张桌子: 采购管理信息系统(id、用户id、采购总额、日期) 每日购买(id、用户id、产品id、已付金额、购买日期) 我有一个每天晚上运行的CRON文件,它从“daily\u purchase”表计算每日购买量,并将insert运行到“purchase\u mis”中 例如: SELECT COUNT(*) AS purchase_count, purchase_date FROM daily_purchase GROUP BY user_id; 这将返回每个用户的购买

我有两张桌子:

  • 采购管理信息系统(id、用户id、采购总额、日期)
  • 每日购买(id、用户id、产品id、已付金额、购买日期)
  • 我有一个每天晚上运行的CRON文件,它从“daily\u purchase”表计算每日购买量,并将insert运行到“purchase\u mis”中

    例如:

    SELECT
        COUNT(*) AS purchase_count,
        purchase_date
    FROM daily_purchase
    GROUP BY user_id;
    
    这将返回每个用户的购买计数,然后将其插入到“购买mis”表中

    但在插入之前,需要检查某个日期“购买日期”的用户\u id=2的购买信息是否已经插入,因此不应再次插入

    我需要类似以下查询的内容:

    INSERT INTO
        purchase_mis(user_id, total_purchased, date)
    VALUES
        ('2', 'purchase_count', 'purchase_date')
    WHERE date NOT EXISTS (SELECT date FROM purchase_mis WHERE user_id = '2');
    
    用这个

    INSERT IGNORE INTO
        purchase_mis(user_id, total_purchased, date)
    VALUES
        ('2', 'purchase_count', 'purchase_date');
    
    你可以用一个声明。为此,您必须在
    user\u id
    date
    上有一个唯一的键。然后,下面的查询将只插入那些键不存在的值(意味着用户没有该日期的条目),并向其他用户发出警告,您可以在此处忽略这些警告

    INSERT IGNORE INTO
        purchase_mis(user_id, total_purchased, date)
    ( SELECT
        user_id,
        COUNT(*),
        purchase_date
    FROM daily_purchase
    GROUP BY user_id );
    

    试试这样的

    INSERT INTO purchase_mis(user_id, total_purchased, date)
    SELECT user_id, purchase_date, count(*)
    FROM daily_purchase a
    LEFT OUTER JOIN purchase_mis b
    ON a.user_id = b.user_id
    AND a.purchase_date = b.date
    WHERE b.user_id IS NULL
    GROUP BY user_id, purchase_date
    

    这看起来像是一个傻瓜,为什么OP应该试试这个?你能讨论一下原因吗?也许可以补充更多细节,说明为什么这是答案?
    INSERT INTO purchase_mis(user_id, total_purchased, date)
    SELECT user_id, purchase_date, count(*)
    FROM daily_purchase a
    LEFT OUTER JOIN purchase_mis b
    ON a.user_id = b.user_id
    AND a.purchase_date = b.date
    WHERE b.user_id IS NULL
    GROUP BY user_id, purchase_date