2012-05-08 10 views
5

Sto provando ad inserire un record se una somma di 3 colonne utente da 2 tabelle supera una costante.MYSQL INSERT SE SOMMA> COSTANTE

Ho cercato dappertutto, trovato non si può mettere variabili utente in IF s, WHERE 's ecc Trovato non si può mettere SUM s in IF s, WHERE' s ecc Sono in un perdita totale. Ecco un esempio del mio codice precedente male prima senza successo, cercando di utilizzare SUM s in WHERE s, se aiuta:

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; 

risposta

4

Prova questo:

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; 

Si tratta di un caso della soluzione generale per una "inserire se la condizione" problema:

insert into ... select ... where condition 

il selezionare restituirà solo le righe se la condizione è vera, e soprattutto, non restituirà righe se falsa - che significa l'inserto su Accade se la condizione è vera, altrimenti non succede nulla.

+0

ringraziamento molto per la risposta rapida. Ora sto ricevendo "# 1064 - Hai un errore nella sintassi SQL, controlla il manuale che corrisponde alla tua versione del server MySQL per la sintassi corretta da usare vicino a 'WHERE (SELECT SUM (..." al primo WHERE È simile agli errori che ho ricevuto nei miei precedenti tentativi: –

+0

@ user1382306 Ho modificato leggermente la risposta per aggiungere 'from dual' - prova ora – Bohemian

1

Questo è lo stesso @ risposta di Boemia, ma è avuto modo di aggiungere una clausola LIMIT per fermare l'inserimento di più record, dal momento che selezionare clausola può restituire più record

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