2014-01-08 105 views
0

我有2個表:設置列日到另一表的日期列加30天

newtable的

ID____PersonID___Criteria___TimeStamp 
1_____456________1__________01/08/2014 
2_____287________0__________01/08/2014 
3_____359________0__________01/08/2014 

代碼PersonTable

ID______LastLogin 
456_____11/08/2013 
287_____10/25/2013 
359_____09/15/2013 

我試圖要做的是更新NewTable.TimeStamp等於PersonTable.LoginDat Ë加30天,其中NewTable.Criteria = 0

預期的效果

newtable的

ID____PersonID___Criteria___TimeStamp 
1_____456________1__________01/08/2014 
2_____287________0__________11/24/2013 
3_____359________0__________10/15/2013 

我已經試過,但這些似乎沒有做任何事情:

UPDATE NewTable AS NT 
    INNER JOIN PersonTable AS PT ON PT.ID = NT.PersonID AND NT.Criteria = 0 
SET NT.TimeStamp = DATE_ADD(PT.LastLogin, INTERVAL 30 DAY); 

- 我試過了

UPDATE `NewTable` AS NT, PersonTable AS PT 
SET NT.TimeStamp = DATE_ADD(PT.LastLogin, INTERVAL 30 DAY) 
WHERE NT.PersonID = PT.ID 
    AND NT.Criteria = 0; 
+0

你能解釋爲想要擺脫你的'PersonTable'表的邏輯是什麼? – Kermit

+0

@Ken。 。 。您的第一個查詢看起來正確你確定'LastLogin'是日期/日期時間嗎?你確定'NT.Criteria'是一個整數而不是一個字符串嗎? –

+0

LastLogin和UserID列在哪裏?或其他查詢,然後你的列? –

回答

0
UPDATE NewTable AS NT INNER JOIN PersonTable AS PT 
ON PT.ID = NT.UserID 
SET NT.TimeStamp = DATE_ADD(PT.LastLogin, INTERVAL 30 DAY) 
WHERE NT.Criteria = 0 
+0

使用無效的更新/連接語法(對於MySQL)可能無助於這種情況 –

+0

@GordonLinoff thanks for指出這一點,請隨時編輯我的答案 –

+0

這會導致錯誤,LINQPad給我「你的SQL語法有錯誤;檢查t他手冊,對應於您的MySQL服務器版本的正確語法使用附近的'FROM'NewTable AS NT INNER JOIN PersonTable AS PT ...' – Ken

0

必須修改出頭的第一個查詢

UPDATE NewTable AS NT 
INNER JOIN PersonTable AS PT 
ON PT.ID = NT.PersonID 
AND NT.Criteria = 0 
SET NT.TimeStamp = DATE_ADD(PT.LastLogin, INTERVAL 30 DAY); 

LIVE DEMO HERE

+0

哦,你沒錯,我編輯了它 –

+0

你在我的問題中發現了一個錯誤,我很抱歉,但很好。登錄日期列確實標記爲「LastLogin」,因此該查詢仍然無效。我在我的問題中編輯了我的示例表。查詢運行,但沒有更新或更改 – Ken

+0

看我最後編輯的答案和現場演示,這應該做你想要的 –