'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]
コメントを追加