我有一个包含3个通用键的表,这些键也是外键。这是我的查询 -
IF (EXISTS(SELECT * FROM table1 WHERE col_1 =4))
BEGIN
UPDATE table1
SET col_2 = 3,
col_3 = 100
WHERE col_1 = 4
END
ELSE
BEGIN
INSERT INTO table1
(col_1, col_2, col_3)
VALUES(4, 2, 27)
END
这给我一个语法错误。引擎使用了InnoDB。整理:utf8_swedish_ci
我也试过了 -
INSERT INTO table1
(col1, col2, col3)
VALUES
(:val1, :val2, :val3)
ON DUPLICATE KEY UPDATE
col2=:val2,
col3=:val3
这不能正常工作,只会插入行,尽管有重复的密钥。
答案 0 :(得分:0)
试试这个:
IF EXISTS (SELECT 1 FROM table1 WHERE col_1 = '4') THEN
BEGIN
UPDATE assignment_question
SET col_2 = '3', col_3 = '100'
WHERE col_1 = '4';
END
ELSE
BEGIN
INSERT INTO table1 (col_1, col_2, col_3)
VALUES (4, 2, 27);
END
答案 1 :(得分:0)
您可以尝试以下代码作为if exists的替代
SELECT COUNT(*) INTO COUNT FROM TABLE1 WHERE COL_1 = '4'
IF (COUNT > 0) THEN
BEGIN
UPDATE TABLE1 SET COL_2 = '3', COL_3 = '100' WHERE COL_1 = '4';
END
ELSE
BEGIN
INSERT INTO TABLE1 (COL_1, COL_2, COL_3) VALUES (4, 2, 27);
END
希望这有帮助。
答案 2 :(得分:0)
通常对于您想要的场景:"更新/删除现有记录(如果存在)或如果记录不存在则插入新行" ,您可以使用Oracle提供的MERGE命令。
链接:https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9016.htm
PSB以下由Oracle提供的示例:
response.setContentType("application/json")
render JsonOutput.toJson(responseToRender);
答案 3 :(得分:0)
DELIMITER //
CREATE PROCEDURE p()
BEGIN
IF EXISTS(SELECT * FROM table1 WHERE col_1 = 4) THEN
UPDATE table1 SET col_2 = 3, col_3 = 100 WHERE col_1 = 4;
ELSE
INSERT INTO table1 VALUES(4, 2, 27);
END IF;
END//
DELIMITER ;
问题:
END IF
语句必须IF
; mysql
创建了我的程序,因此根据documentation:如果使用 mysql 客户端程序来定义包含分号字符的存储程序,则会出现问题。默认情况下, mysql 本身将分号识别为语句分隔符,因此必须临时重新定义分隔符,以使mysql将整个存储的程序定义传递给服务器。
答案 4 :(得分:0)
试着把它放在BEGIN之前 也尝试在最后一行之后放置END IF
希望这项工作:
IF (EXISTS(SELECT * FROM table1 WHERE col_1 =4)) **THEN**
BEGIN
UPDATE table1
SET col_2 = 3,
col_3 = 100
WHERE col_1 = 4
END
ELSE
BEGIN
INSERT INTO table1
(col_1, col_2, col_3)
VALUES(4, 2, 27)
END
**END IF**