[英]sql if exists update else insert not working
我有一个包含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
这不能正常工作,只有插入行,尽管有重复的键。
通常,对于您希望的情况:“如果存在则更新/删除现有记录,或者如果记录不存在则插入新行”,则可以使用Oracle提供的MERGE命令。
链接: https : //docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9016.htm
PSB以下由Oracle提供的示例:
CREATE TABLE bonuses (employee_id NUMBER, bonus NUMBER DEFAULT 100);
INSERT INTO bonuses(employee_id)
(SELECT e.employee_id FROM employees e, orders o
WHERE e.employee_id = o.sales_rep_id
GROUP BY e.employee_id);
SELECT * FROM bonuses;
EMPLOYEE_ID BONUS
----------- ----------
153 100
154 100
155 100
156 100
158 100
159 100
160 100
161 100
163 100
MERGE INTO bonuses D
USING (SELECT employee_id, salary, department_id FROM employees
WHERE department_id = 80) S
ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
VALUES (S.employee_id, S.salary*0.1)
WHERE (S.salary <= 8000);
EMPLOYEE_ID BONUS
----------- ----------
153 180
154 175
155 170
159 180
160 175
161 170
179 620
173 610
165 680
166 640
164 720
172 730
167 620
171 740
试试这个:
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
您可以尝试使用以下代码作为if存在的替代方法
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
希望这可以帮助。
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 ;
问题:
IF
声明必须有END IF
; mysql
创建了我的程序,所以根据文档 : 如果使用mysql客户端程序定义包含分号字符的存储程序,则会出现问题。 默认情况下, mysql本身将分号识别为语句分隔符,因此必须临时重新定义分隔符以使mysql将整个存储的程序定义传递给服务器。
尝试在BEGIN之前设置THEN也尝试在最后一行之后放置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**
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.