5

2つのテーブルの3つのユーザー列の合計が定数を超えた場合にレコードを挿入しようとしています。

私はあちこちを検索しましたが、ユーザー変数をIFs、WHERE'sなどに入れることができないことがわかりました。sSUMをs IF、 'sなどに入れることができないことがわかりましWHEREた。私は完全に途方に暮れています。SUMこれは、 sでWHEREsを使用しようとして失敗する前の、以前の悪いコードの例です。

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;

これは、「条件の挿入」問題の一般的な解決策の場合です。

insert into ... select ... where condition

selectは、条件がtrueの場合にのみ行を返し、重要なことに、falseの場合は行を返しません。つまり、条件がtrueの場合にのみ挿入が行われ、それ以外の場合は何も行われません。

于 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 に答える