【问题标题】:INSERT only when IF-condition is true仅当 IF 条件为真时插入
【发布时间】:2016-07-21 17:15:23
【问题描述】:

我想知道当 IF-Condition 为真时是否有可能在表中插入一行:

 SET @Value1 := '1'; 
 SET @Value2 := '2'; 
 IF(@Value2 >= @Value1) 
     THEN INSERT INTO `Table` 
     (`Row1`, `Row2`) 
     VALUES 
     ('Valuecheck', 'Second value is greater than first value');
 END IF;

MySQL 报告错误 #1064 - 您的 SQL 语法有错误,但我找不到问题所在。仅当 IF 子句为真时才应执行插入。

【问题讨论】:

  • 您不能在 sql 脚本中使用 IF 的那种形式,只能存储过程和函数以及触发器。

标签: mysql if-statement sql-insert


【解决方案1】:

基于this answer,以下应该可以工作:

SET @Value1 := '1'; 
SET @Value2 := '2'; 
INSERT INTO `table` (`Row1`, `Row2`) 
    VALUES 
    ('Valuecheck', 'Second value is greater than first value');
WHERE @Value2 >= @Value1

【讨论】:

  • 您需要编辑;该答案不使用VALUES,但引用的答案是合适的。
  • 这怎么可能是正确的并且被接受的答案?你不能在INSERT 上有WHERE,无论如何语法都是错误的(WHERE 之前的额外;),链接(正确)答案的重点是它说你 must 使用INSERT INTO ... SELECT ... WHERE,而不是VALUES。呜呜呜……
【解决方案2】:

您可以执行INSERT...SELECT 并将您的条件放在WHERE 子句中;但是,由于 MySQL 需要 FROM 并且您没有引用表,因此您需要使用它的“虚拟”表,称为 DUAL。

像这样:

SET @Value1 := '1'; 
SET @Value2 := '2'; 

INSERT INTO `Table`(`Row1`, `Row2`) 
SELECT 'Valuecheck', 'Second value is greater than first value'
FROM DUAL
WHERE @Value2 >= @Value1
;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-14
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多