我正在尝试使用'插入到。。。选择复制密钥更新功能'但我现在有麻烦了。
我想将数据插入到'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;
我遇到了一个错误代码。
错误代码:1064您的sql语法有错误;在第21行的“key update cpvalue=1”附近,检查与您的mariadb服务器版本相对应的手册,以了解要使用的正确语法
我的问题怎么了?我真的不知道。。
谢谢您。
2条答案
按热度按时间iyfamqjs1#
如果你使用显式的
join
:我怀疑这是一个解析问题,因为mysql/mariadb支持
ON
条款CROSS JOIN
(恶心!!!)。但是ON
关键字变得混乱。hi3rlvi22#
也许你可以简化它而不用交叉连接。
在mysql中,交叉连接只是内部连接的同义词。
但你不想最后一次
ON
关键字作为连接的一部分被混淆。样本数据
插入查询
结果:
db<>在这里摆弄