このクエリは、tmp から lee テーブルにデータを挿入します。テーブル、一意のキーの競合が発生した場合は既存の行を更新します。ただし、ON DUPLICATE KEY UPDATE 句の構文は不明瞭です。
MySQL では、ON DUPLICATE KEY UPDATE の後の式の左側が INSERT INTO 句の列を参照していると想定しています。一方、右側は SELECT 句の列を参照します。
たとえば、次のことを考えてみましょう。次のクエリ:
INSERT INTO lee(exp_id, created_by, location, animal, starttime, endtime, entct, inact, inadur, inadist, smlct, smldur, smldist, larct, lardur, lardist, emptyct, emptydur) SELECT id, uid, t.location, t.animal, t.starttime, t.endtime, t.entct, t.inact, t.inadur, t.inadist, t.smlct, t.smldur, t.smldist, t.larct, t.lardur, t.lardist, t.emptyct, t.emptydur FROM tmp t WHERE uid=x ON DUPLICATE KEY UPDATE entct=t.entct, inact=t.inact, ...
このクエリでは、ON DUPLICATE KEY UPDATE 句の左側が INSERT INTO 句で指定された列と一致します。等号の前の列は leo テーブル内の列を表し、等号の後の列は SELECT 句から更新される値を表します。
以上がMySQL の「ON DUPLICATE KEY UPDATE」句で「INSERT INTO ... SELECT ...」を使用して列を正しく指定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。