使用“如果存在”语句插入查询



我有两个表:

  1. purchase_mis(id, user_id, total_purchased, date)
  2. daily_purchase(id, user_id, product_id, paid_amount, purchase_date)

我有一个每晚运行的 CRON 文件,它计算从"daily_purchase"表中的每日购买量,并将插入运行到"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');

尝试这样的事情。

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
您可以使用

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 );

使用这个

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

最新更新