我有一个使用select子查询运行的插入查询。这基本上需要"分叉"找到并插入的行的副本。这部分有效,但没有垃圾收集。我在数据库事件上运行它,因此它根据条件查找记录,然后将其作为新记录分叉...再次运行将其关闭。任何想法,所以它找到的记录可能会更新或停止循环。
INSERT INTO charity (pid, itemname, newval)
SELECT cha.pid, cha.itemname, 'ref')
FROM charity AS cha, entry AS ent
WHERE cha.pid = ent.id
AND cha.status = 'Pending'
AND cha.type = 'CHAR'
AND ent.dates < CURDATE()
AND ent.total > (SELECT sum(price) FROM charity WHERE cha.type = 'CHAR')
答案 0 :(得分:0)
您可以对表进行左连接以匹配分叉记录,并排除那些已经分叉的记录。
INSERT INTO charity (pid, itemname, newval)
SELECT cha.pid, cha.itemname, 'ref')
FROM charity AS cha, entry AS ent
left outer join charity as cha2
on cha2.pid=cha.pid and cha2.itemname = cha.itemname and
cha2.newval='ref'
WHERE cha.pid = ent.id
AND cha.status = 'Pending'
AND cha.type = 'CHAR'
AND ent.dates < CURDATE()
AND ent.total > (SELECT sum(price) FROM charity WHERE cha.type = 'CHAR')
AND cha2.pid IS NULL
警告 - 未经测试。我没有足够的信息来充分指定可能已经创建的记录。
您可能还需要在join on子句中添加更多测试。基本上,这会找到尚未创建相关新记录的记录 - 在这种情况下是reford with newval ='ref',其他2个字段匹配。