5

如果来自 2 个表的 3 个用户列的总和超过一个常数,我正在尝试插入一条记录。

我到处搜索,发现您不能将用户变量放入IFs, WHERE's 等。发现您不能将SUMs 放入IFs, WHERE's 等。我完全不知所措。这是我之前尝试SUM在 s 中使用 s失败之前的错误代码示例WHERE,如果有帮助的话:

SELECT SUM(num1) INTO @mun1 FROM table1 WHERE user = '0';

SELECT SUM(num2) INTO @mun2 FROM table1 WHERE user = '0';

SELECT SUM(num3) INTO @mun3 FROM table2 WHERE column1 = 'd' AND user = '0';

SET @mun4 = @mun1 - @mun2 - @mun3;

INSERT INTO table2 (user, column1, column2) VALUES ('0', 'd', '100') WHERE @mun4 >= 100;
4

2 回答 2

4

尝试这个:

INSERT INTO table2 (user, column1, column2) 
select '0', 'd', '100'
from dual
where (SELECT SUM(num1 + num2) FROM table1 WHERE user = '0') +
      (SELECT SUM(num3) FROM table2 WHERE column1 = 'd' AND user = '0') > 100;

这是“插入 if 条件”问题的一般解决方案的一个案例:

insert into ... select ... where condition

select 只会在条件为真时返回行,重要的是,如果为假,则不会返回任何行——这意味着只有在条件为真时才会插入,否则什么也不会发生。

于 2012-05-08T14:41:58.003 回答
1

这与@Bohemian 的答案相同,但是您必须添加一个LIMIT子句来停止插入多条记录,因为 select 子句可能会返回多条记录

INSERT INTO table2 (user, column1, column2) 
SELECT      '0', 'd', '100'
   FROM dual
   WHERE 
         (SELECT SUM(num1 - num2) FROM table1 WHERE user = '0')
         (SELECT SUM(num3) FROM table2 WHERE column1 = 'd' AND user = '0') > 
         100 
   LIMIT 1
于 2012-05-08T15:33:42.717 回答