INSERT INTO ... SELECT ... ON DUPLICATE KEYUPDATEでSQLを使用する場合のエラー1064

情熱053

'INSERT INTO ... SELECT ON DUPLICATE KEY UPDATE機能'を使用しようとしていますが、問題が発生しています。

'fruitProperty'テーブルにデータを挿入したい。

私の質問は以下の通りです:

START TRANSACTION;

SET @myVal1 := "";
SET @myVal2 := 0;
SET @myVal3 := 0;
SET @myVal4 := 0;
SET @myVal5 := 0;

SELECT masterIndex INTO @myVal1 FROM fruitMaster WHERE masterName = 'apple';
SELECT masterIndex INTO @myVal2 FROM fruitMaster WHERE masterName = 'banana';
SELECT masterIndex INTO @myVal3 FROM fruitMaster WHERE masterName = 'mango';
SELECT masterIndex INTO @myVal4 FROM fruitMaster WHERE masterName = 'melon';
SELECT masterIndex INTO @myVal5 FROM fruitMaster WHERE masterName = 'grape';

INSERT
INTO    fruitProperty
        (fruitID, masterIndex, cpValue)
SELECT  A1.fruitID, A2.masterIndex, A2.cpValue
FROM    (   
           SELECT   A.fruitID
           FROM     fruit A
                    JOIN fruitProperty B ON A.fruitID = B.fruitID
           WHERE    B.masterIndex = @myVal1 AND B.cpValue = 1
        ) A1
        CROSS JOIN
        (
           SELECT @myVal2 AS masterIndex, 1 AS cpValue
           UNION
           SELECT @myVal3, 1
           UNION
           SELECT @myVal4, 1
           UNION
           SELECT @myVal5, 1
       ) A2
ON DUPLICATE KEY UPDATE cpValue = cpValue + 1;

ROLLBACK;

エラーコードが発生しました。

エラーコード:1064SQL構文にエラーがあります。21行目の「KEYUPDATEcpValue = 1」の近くで使用する正しい構文については、MariaDBサーバーのバージョンに対応するマニュアルを確認してください。

私のクエリの何が問題になっていますか?本当にわかりません。

ありがとうございました。

ゴードン・リノフ

明示的に使用すると問題が発生しますかjoin

INSERT INTO fruitProperty (fruitID, masterIndex, cpValue)
SELECT f.fruitID, A2.masterIndex, A2.cpValue
FROM (SELECT f.fruitID
      FROM fruit f JOIN
           fruitProperty fp
            ON f.fruitID = fp.fruitID
      WHERE f.masterIndex = @myVal1 AND fp.cpValue = 1
     ) f JOIN
     (SELECT @myVal2 AS masterIndex, 1 AS cpValue
      UNION ALL
      SELECT @myVal3, 1
      UNION ALL
      SELECT @myVal4, 1
      UNION ALL
      SELECT @myVal5, 1
     ) A2
     ON 1=1
ON DUPLICATE KEY UPDATE cpValue = VALUES(cpValue) + 1;

MySQL / MariaDBは(yuck !!!)のON句をサポートしているため、この問題は解析の問題だとCROSS JOIN思います。しかし、ONキーワードは混乱します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

INSERT ... SELECT ... ON DUPLICATE KEYUPDATEの「Records」および「Duplicates」カウントを取得する

分類Dev

INSERT ON DUPLICATE KEYUPDATEで「join」を使用することは可能ですか?

分類Dev

Mysql INSERT INTO ... SELECT .... ON DUPLICATE KEY UPDATE

分類Dev

SQL Select In Select for insert Stement

分類Dev

INSERT ... ON DUPLICATE KEYUPDATEの実行中にエラーが発生しました

分類Dev

SELECT ... WHEREを使用する場合のMySQLエラー1064

分類Dev

INSERT ON DUPLICATE KEYUPDATEステートメントを使用した複雑なmysqlクエリエラー

分類Dev

SQL CASE SELECT INSERT

分類Dev

SQL select and insert if not exists

分類Dev

INSERT INTO ... mysqlのSELECT

分類Dev

MySQLは、INSERT INTO SELECT ... ON DUPLICATE KEY UPDATE ... SQLステートメントを使用すると、更新する代わりに新しい行を作成します。

分類Dev

INSERT INTO ... ON DUPLICATE KEYUPDATEが機能していないようです

分類Dev

MySqlのINSERT〜SELECT〜ON DUPLICATE KEYクエリの何が問題になっていますか?

分類Dev

sql INSERT condition as a select statement?

分類Dev

SQL Server:INSERT INTO SELECT MAX

分類Dev

INSERT INTO ... ON DUPLICATE KEYUPDATEの前に値が存在するかどうかを確認してください

分類Dev

Python- '不明なエンコーディング:utf8mb4' ON DUPLICATE KEYUPDATEを使用する場合

分類Dev

Select everything from SQL database except duplicate

分類Dev

"INSERT INTO t(x) .. SELECT MAX(t.x) + 1 .." sometimes returns "DUPLICATE KEY"

分類Dev

INSERT…ONDUPLICATE KEYUPDATEを複数のキーで使用する

分類Dev

SQL Insert multiple record while using ON DUPLICATE KEY UPDATE

分類Dev

MySQL-'INSERT INTO-ON DUPLICATE KEYUPDATE 'はデータ損失を引き起こす可能性があります

分類Dev

SQL Server 2005 - Insert with Select for 1 Value

分類Dev

mysql INSERT ... ON DUPLICATE KEYUPDATEがマスター/マスター構成でRBRレプリケーションを中断できる理由

分類Dev

PostgreSQL BIGSERIAL and "duplicate key" on insert

分類Dev

PHP MySQL INSERT ON DUPLICATE KEYUPDATEが機能しない

分類Dev

SQL:How to select the first record from duplicate rows?

分類Dev

SQL:How to select the first record from duplicate rows?

分類Dev

MySQL-INSERT、INSERT IGNORE、ON DUPLICATE UPDATEを1つの有効なクエリに組み合わせる方法は?

Related 関連記事

  1. 1

    INSERT ... SELECT ... ON DUPLICATE KEYUPDATEの「Records」および「Duplicates」カウントを取得する

  2. 2

    INSERT ON DUPLICATE KEYUPDATEで「join」を使用することは可能ですか?

  3. 3

    Mysql INSERT INTO ... SELECT .... ON DUPLICATE KEY UPDATE

  4. 4

    SQL Select In Select for insert Stement

  5. 5

    INSERT ... ON DUPLICATE KEYUPDATEの実行中にエラーが発生しました

  6. 6

    SELECT ... WHEREを使用する場合のMySQLエラー1064

  7. 7

    INSERT ON DUPLICATE KEYUPDATEステートメントを使用した複雑なmysqlクエリエラー

  8. 8

    SQL CASE SELECT INSERT

  9. 9

    SQL select and insert if not exists

  10. 10

    INSERT INTO ... mysqlのSELECT

  11. 11

    MySQLは、INSERT INTO SELECT ... ON DUPLICATE KEY UPDATE ... SQLステートメントを使用すると、更新する代わりに新しい行を作成します。

  12. 12

    INSERT INTO ... ON DUPLICATE KEYUPDATEが機能していないようです

  13. 13

    MySqlのINSERT〜SELECT〜ON DUPLICATE KEYクエリの何が問題になっていますか?

  14. 14

    sql INSERT condition as a select statement?

  15. 15

    SQL Server:INSERT INTO SELECT MAX

  16. 16

    INSERT INTO ... ON DUPLICATE KEYUPDATEの前に値が存在するかどうかを確認してください

  17. 17

    Python- '不明なエンコーディング:utf8mb4' ON DUPLICATE KEYUPDATEを使用する場合

  18. 18

    Select everything from SQL database except duplicate

  19. 19

    "INSERT INTO t(x) .. SELECT MAX(t.x) + 1 .." sometimes returns "DUPLICATE KEY"

  20. 20

    INSERT…ONDUPLICATE KEYUPDATEを複数のキーで使用する

  21. 21

    SQL Insert multiple record while using ON DUPLICATE KEY UPDATE

  22. 22

    MySQL-'INSERT INTO-ON DUPLICATE KEYUPDATE 'はデータ損失を引き起こす可能性があります

  23. 23

    SQL Server 2005 - Insert with Select for 1 Value

  24. 24

    mysql INSERT ... ON DUPLICATE KEYUPDATEがマスター/マスター構成でRBRレプリケーションを中断できる理由

  25. 25

    PostgreSQL BIGSERIAL and "duplicate key" on insert

  26. 26

    PHP MySQL INSERT ON DUPLICATE KEYUPDATEが機能しない

  27. 27

    SQL:How to select the first record from duplicate rows?

  28. 28

    SQL:How to select the first record from duplicate rows?

  29. 29

    MySQL-INSERT、INSERT IGNORE、ON DUPLICATE UPDATEを1つの有効なクエリに組み合わせる方法は?

ホットタグ

アーカイブ