我有两张桌子:
purchase_mis(id, user_id, total_purchased, date)
daily_purchase(id, user_id, product_id, paid_amount, purchase_date)
我有一个每晚运行的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');
答案 0 :(得分:0)
使用此
INSERT IGNORE INTO
purchase_mis(user_id, total_purchased, date)
VALUES
('2', 'purchase_count', 'purchase_date');
答案 1 :(得分:0)
您可以使用INSERT IGNORE
语句。为此,您必须拥有user_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 );
答案 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