使用if exists语句INSERT查询

时间:2012-12-06 09:34:41

标签: mysql

我有两张桌子:

  1. purchase_mis(id, user_id, total_purchased, date)
  2. daily_purchase(id, user_id, product_id, paid_amount, purchase_date)
  3. 我有一个每晚运行的CRON文件,它从“daily_purchase”表中计算每日购买量,并将“insert”运行到“purchase_mis”。

    例如:

    SELECT
        COUNT(*) AS purchase_count,
        purchase_date
    FROM daily_purchase
    GROUP BY user_id;
    

    这将返回每个用户的purchase_count,然后它将被插入“purchase_mis”表。

    INSERT INTO
        purchase_mis(user_id, total_purchased, date)
    VALUES
        ('2', 'purchase_count', 'purchase_date');
    

    但在插入之前,需要检查已经插入了某个日期“purchase_date”的user_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');
    

3 个答案:

答案 0 :(得分:0)

使用此

INSERT IGNORE INTO
    purchase_mis(user_id, total_purchased, date)
VALUES
    ('2', 'purchase_count', 'purchase_date');

答案 1 :(得分:0)

您可以使用INSERT IGNORE语句。为此,您必须拥有user_iddate上的唯一键。然后,以下查询将仅插入那些键不存在的值(表示没有该日期条目的用户)并为其他人发出警告,您可以在此处忽略。

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

答案 2 :(得分:0)

尝试这样的事情。

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