2016-06-21 90 views
0

我試過幾種方法在select子句中實現子查詢。基本上我只想在一個表中查找一個日期並將其存儲在另一個表中。在這個例子中,我得到一個錯誤「未知列'areckey'在where子句中」子查詢中比較變量的MySQL子查詢錯誤

insert into cmeFillCompaction set 
    reckey=2421, 
    areckey=3170, 
    WEBDATE=(select pickupdate from cmeSchedule s where s.reckey=areckey) 
on duplicate key update 
    reckey=2421, 
    areckey=3170, 
    WEBDATE=(select pickupdate from cmeSchedule s where s.reckey=areckey) 

正確的語法是什麼?

+0

'INSERT INTO YourTable(FIELD1,FIELD2)值(VAL1,VAL2)' –

+0

我更喜歡指定與INSERT INTO yourTable SET COL1 = EXP1字段的替代方法中,COL2 = EXP2 ...但是,這真的不是我的問題。這是我發佈的子查詢,我需要幫助。它適用於基本的選擇,但似乎不適用於插入 – Claus

回答

0

您不能使用這樣的相關子查詢,因爲該行尚不存在與之比較。使用INSERT...SELECT。並且您不需要重複ON DUPLICATE KEY子句中的值,如果INSERT成功,則可以使用VALUES(columnname)來獲取已分配給該列的值。

INSERT INTO cmeFillCompaction (reckey, areckey, webdate) 
SELECT reckey, 3170, pickupdate 
FROM cmeSchedule 
WHERE reckey = 2421 
ON DUPLICATE KEY UPDATE webdate = VALUES(webdate) 
+0

太棒了。我還有許多其他字段/值也要更新。我只是按照相同的順序列出它們?對於全部的語法都不太確定 – Claus

+0

只要確保'SELECT'中的字段與'INSERT'行中的列列表匹配即可。 – Barmar

+0

啊!在您引導我到手冊中的現場後,我發現一個問題。我只想從cmeSchedule表中獲取日期字段。其餘數據不是來自該表。聽起來像我需要做一個查詢日期作爲一個單獨的查詢 – Claus