2012-05-08 21 views
5

Estoy tratando de insertar un registro si una suma de 3 columnas de usuarios de 2 tablas excede una constante.MYSQL INSERT IF SUM> CONSTANTE

He buscado por todas partes, que se encuentra no se puede poner variables de usuario en IF s, WHERE 's etc. encontrados no se puede poner en SUM s IF s, WHERE' s etc Estoy en una pérdida total. He aquí un ejemplo de mi anterior mala código antes de intentar sin éxito utilizar SUM s en WHERE s, si ayuda:

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; 

Respuesta

4

Prueba esto:

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; 

Este es un caso de la solución general para una "insertar si la condición" problema:

insert into ... select ... where condition 

el seleccione sólo devolverá filas si la condición es verdadera, y esto es importante, no devolverá filas si es falso - lo que significa la inserción de sucede si la condición es verdadera, de lo contrario no pasa nada.

+0

de agradecimiento mucho por su rápida respuesta. Ahora, estoy recibiendo "# 1064 - Usted tiene un error en su sintaxis SQL, consulte el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de 'DONDE (SELECCIONAR SUM (..." en el primer DONDE Es similar a los errores que he recibido en mis intentos anteriores. –

+0

@ user1382306 Edité la respuesta ligeramente para agregar 'desde dual' - inténtelo ahora – Bohemian

1

Esto es igual que @ respuesta de Bohemia, pero usted tiene que añadir una cláusula LIMIT para detener la inserción de múltiples registros, ya que seleccione cláusula puede devolver varios registros

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