gpt4 book ai didi

mysql - 如果条目不存在,则从另一个表 A 插入表 B

转载 作者:行者123 更新时间:2023-11-29 23:01:08 25 4
gpt4 key购买 nike

我想在表“filterre”中插入最后 100 条记录(ORDER BY TIME DESC表“call_record”的 LIMIT 0 , 100) 当条目不存在时。问题是它插入行,即使该行存在。所以我在过滤器中有重复的行

INSERT INTO filtre (number, sim_name, duration, time)
SELECT number, sim_name, duration, TIME
FROM `call_record`
WHERE NOT EXISTS (
SELECT number, sim_name, duration, time
FROM filtre
)
AND
sim_name =1701
GROUP BY number
ORDER BY TIME DESC
LIMIT 0 , 100

最佳答案

问题是您没有将子查询中的行与父查询相关联。您的子查询只是检查“call_record”中是否存在任何行。试试这个:

INSERT INTO filtre (number, sim_name, duration, TIME) 
SELECT number, sim_name, duration, TIME
FROM call_record cr
WHERE NOT EXISTS (
SELECT 1
FROM filtre f
WHERE cr.number = f.number
AND cr.sim_name = f.sim_name
AND cr.time = f.time
AND cr.duration = f.duration)
AND sim_name =1701
GROUP BY number
ORDER BY TIME DESC LIMIT 0 , 100

虽然是即兴的,但这并不是实现预期结果的最有效方法。不过,我对您的 GROUP BY 子句感到困惑,因此在没有更好地了解您正在处理的数据集的情况下,我不确定该建议什么。

或者,正如 symcbean 在上面的评论中建议的那样,在表上添加唯一索引并使用 INSERT IGNORE 应该可以解决问题。常见的做法是添加一个具有自动递增整数值的 Id 列,并将其设置为主键。假设您只插入而不更新记录,这应该适合您。这样您就不需要在所有列中使用唯一索引。

INSERT IGNORE INTO filtre (id, number, sim_name, duration, TIME) 
SELECT id, number, sim_name, duration, TIME
FROM call_record
WHERE sim_name = 1701
ORDER BY TIME DESC
LIMIT 0 , 100

关于mysql - 如果条目不存在,则从另一个表 A 插入表 B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28489699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com