2017-07-26 60 views
0

我有一個插入查詢與選擇子查詢運行。這需要基本上「分離」它找到並插入的行的副本。這部分工作,但沒有垃圾收集。我有這個數據庫事件運行,所以它發現基於條件的記錄,然後把它作爲新的記錄分叉......再次運行分叉。任何想法,所以它發現的記錄可能是更新或停止週期的方式。使用插入的更新爲mysql

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

您可以對錶進行左連接以匹配分叉記錄並排除已分叉的記錄。

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子句中添加更多測試。基本上,這個查找關聯的新記錄尚未創建的記錄 - 在這種情況下,與其他兩個字段匹配的newval ='ref'的reford。

+0

我試過下面的地方,我添加了NOT EXISTS ...希望INSERT看起來仍然在newval中插入ref列,但是看看是否爲pid ,並且如果該pid有ref的newval記錄插入它。但出了問題 INSERT INTO慈善(PID,ITEMNAME,的newval) SELECT cha.pid,cha.itemname, '裁判') FROM慈善機構茶,條目ENT WHERE NOT EXISTS(SELECT的newval FROM慈善WHERE和cha.type ='CHAR' AND ent.dates (SELECT sum(price)FROM charity WHERE cha.newval ='CHAR') – hermes

+0

我不認爲你的子查詢是足夠明確的 - 它將coutn任何記錄newval ='ref'與其他字段無關。 – RichGoldMD