ホームページ > データベース > mysql チュートリアル > MySQL の「ON DUPLICATE KEY UPDATE」句で「INSERT INTO ... SELECT ...」を使用して列を正しく指定する方法

MySQL の「ON DUPLICATE KEY UPDATE」句で「INSERT INTO ... SELECT ...」を使用して列を正しく指定する方法

Linda Hamilton
リリース: 2024-12-03 11:26:16
オリジナル
425 人が閲覧しました

How to Correctly Specify Columns in MySQL's `ON DUPLICATE KEY UPDATE` Clause with `INSERT INTO ... SELECT ...`?

「INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE」の列更新構文の解決

このクエリは、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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート