mysql查询条件语句中的INSERT INTO(if / else情况)

mysql query INSERT INTO in a conditional statements (case if/else)

我试图弄清楚要插入到CASE语句中的INSERT INTO之类的mysql中使用条件语句

1
2
3
4
5
6
SET @foo = 1
SELECT (CASE WHEN 1 THEN (
  INSERT INTO table1 (`id`, `column`) VALUE (1, 'a');
  SET @bar = SELECT LAST_INSERT_ID();
  UPDATE table2 SET c1 = @foo WHERE c2 = @bar
) END)

我正在按照如何在MySQL查询中编写IF ELSE语句的建议使用case

但是当我尝试时,我不断得到:

1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTO ForgeRock (`id`, `productName`, `description`) VALUE (4, 'a','b') ) END)' at line 2

http://sqlfiddle.com/#!9/dcb16/22063

所以我正在尝试使用if / else方法...

1
SELECT IF(1,(INSERT INTO ForgeRock (`id`, `productName`, `description`) VALUE (4, 'a','b')),0)

但这给出了相同的错误

1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTO ForgeRock (`id`, `productName`, `description`) VALUE (4, 'a','b')),0)' at line 1

http://sqlfiddle.com/#!9/dcb16/22081

所以我假设这不可能在mysql中完成? https://stackoverflow.com/a/13681306/1267259
(但是,OP没有收到相同的错误吗?)

当我写这个问题时,我发现使用基于Count的IF ELSE语句来执行不同的Insert语句
是使用过程来做到这一点的唯一方法吗?


记住IF()函数和IF语句之间的区别。

您可以实现的一种选择是使用函数(13.1.12 CREATE PROCEDURE和CREATE FUNCTION语法):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/* CODE FOR DEMONSTRATION PURPOSES */

DELIMITER //

CREATE FUNCTION `insert_new_value` (`p_foo` INT UNSIGNED) RETURNS TINYINT(1)
DETERMINISTIC
BEGIN
  /*
  INSERT INTO table1 (`id`, `column`) VALUE (1, 'a');
  SET @bar = SELECT LAST_INSERT_ID();
  -- UPDATE table2 SET c1 = @foo WHERE c2 = @bar;
  UPDATE table2 SET c1 = `p_foo` WHERE c2 = @bar;
  */

  INSERT INTO `ForgeRock`
  (`id`, `productName`, `description`)
  VALUES
  (4, 'a', 'b');
  RETURN 1;
END//

DELIMITER ;

SET @foo := 1;
-- You can also use CASE expression.
SELECT IF(1, `insert_new_value`(@foo), 0) INTO @`return_value`;

/* CODE FOR DEMONSTRATION PURPOSES */

SQL提琴程序demo