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、已付金额、购买日期)
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