2016-06-21 12 views
0

select句にサブクエリを実装する方法をいくつか試しました。基本的には、あるテーブルで日付を検索し、それを別のテーブルに格納したいだけです。この例では、「where句に「未知の列 'areckey」というエラーが表示されます。サブクエリ内の比較変数の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

IはINSERT INTO yourTableのSET COL1のフィールドを指定する別の方法を好む= EXP1、EXP2 COL2 = ...しかし、それ本当に私の質問ではありませんでした。私が投稿したサブクエリです。私は助けが必要です。それは基本的な選択で動作しますが、挿入物では機能しないようです – 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

関連する問題