MySQL - correccion de consulta

 
Vista:
sin imagen de perfil

correccion de consulta

Publicado por sebastian (4 intervenciones) el 20/11/2017 16:35:17
cordisal saludo me podrian ayudar a encontrar el error de sintaxis en esta query:

SELECT inventario.referencia, inventario.nombre, inventario.existencia, transitos.cantidad AS transitos, total_consumo.Consumos, 100 AS Futuro, If(IsNull(Consumos),0,Round((Consumos/10)*3)) AS Minimo, If('Minimo'>'Existencias',1,0) AS Alerta, If (Alerta=1, Ifnull(cantidad,0)+ Minimo-Existencias-Ifnull(transitos,0)) AS Pedido FROM inventario LEFT JOIN transitos ON inventario.referencia = transitos.referencia LEFT JOIN total_consumo ON inventario.referencia = total_consumo.REFERENCIA;

me dice que hay algo mal cerca ') as pedido
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 117
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

correccion de consulta

Publicado por Nicolas (46 intervenciones) el 20/11/2017 16:42:59
Hola Sebastián.
Fíjate en el IF de la consulta que a MÍNIMO lo tienes entre comillas simples y creo es un Campo de la consulta.
Espero te ayude. Abrazo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

correccion de consulta

Publicado por sebastian (4 intervenciones) el 20/11/2017 16:49:40
hola Nicolas,
el tema es que la consulta hasta aqui funciona:

SELECT inventario.referencia, inventario.nombre, inventario.existencia, transitos.cantidad AS transitos, total_consumo.Consumos, 100 AS Futuro, If(IsNull(Consumos),0,Round((Consumos/10)*3)) AS Minimo, If('Minimo'>'Existencias',1,0) AS Alerta
FROM inventario LEFT JOIN transitos ON inventario.referencia = transitos.referencia LEFT JOIN total_consumo ON inventario.referencia = total_consumo.REFERENCIA.

el problema empieza cuando le pongo este tramo

"If( Alerta=1, Ifnull(cantidad,0)+ Minimo - Existencias - Ifnull(transitos,0) AS Pedido"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

correccion de consulta

Publicado por Rafael (97 intervenciones) el 20/11/2017 17:08:50
Hola tu problema esta en que la funcion IF esta incompleta...

Le dices que hacer cuando CUMPLE pero no cuando NO CUMPLE, si no le vas a decir cuando NO CUMPLE tienes que cerrar el parentesis como sea

1
If( Alerta=1, Ifnull(cantidad,0)+ Minimo - Existencias - Ifnull(transitos,0) ) AS Pedido
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

correccion de consulta

Publicado por sebastian (4 intervenciones) el 20/11/2017 17:46:41
muchas gracias la consulta ya funciona ahora el problema es que no me esta generando la diferencia en el campo alerta ni la operacion para el campo pedido :/

SELECT inventario.referencia, inventario.nombre, inventario.existencia, transitos.cantidad AS transitos, total_consumo.Consumos, 100 AS Futuro, If(IsNull(Consumos),0,Round((Consumos/10)*3)) AS Minimo, If('Minimo'>'existencias',1,0) AS Alerta, If( 'Alerta'<>1,Ifnull(cantidad,0)+ 'Minimo' - 'existencias' - Ifnull('transitos',0),0) AS Pedido FROM inventario LEFT JOIN transitos ON inventario.referencia = transitos.referencia LEFT JOIN total_consumo ON inventario.referencia = total_consumo.REFERENCIA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

correccion de consulta

Publicado por leonardo_josue (414 intervenciones) el 21/11/2017 21:04:00
Hola Sebastian:

Estoy checando tu post y veo varios Errores (por no decir Horrores) con tu sintaxis, pero vayamos por partes. Primero, dándole un poco de formato a tu consulta (Cosa que te recomiendo que hagas siempre) y utilizando las herramientas de formato del FORO (es decir, utilizando la opción </> para englobar código, tenemos esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
  inventario.referencia,
  inventario.nombre,
  inventario.existencia,
  transitos.cantidad AS transitos,
  total_consumo.Consumos,
  100 AS Futuro,
  IF(ISNULL(Consumos),0,ROUND((Consumos/10)*3)) AS Minimo,
  IF('Minimo'>'existencias',1,0) AS Alerta,
  IF( 'Alerta'<>1,IFNULL(cantidad,0)+ 'Minimo' - 'existencias' - IFNULL('transitos',0),0) AS Pedido
FROM inventario
LEFT JOIN transitos ON inventario.referencia = transitos.referencia
LEFT JOIN total_consumo ON inventario.referencia = total_consumo.REFERENCIA

Los primeros errores están en el campo ALERTA:

1. Al poner esto en tu consulta:

1
IF('Minimo'>'existencias',1,0) AS Alerta,

estás colocando COMILLAS SIMPLES en MINIMO y EXISTENCIAS, por lo tanto MySQL lo interpreta como dos CADENAS... mucho ojo, ya lo comentó Nicolás en su primer respuesta, pero tal parece que no le hiciste caso, pues sigues repitiendo el mismo error. Para hacer referencia a un CAMPO, utilices al acento grave (o acento invertido, no sé como lo llamen en tu país), en otras palabras,

1
2
no es lo mismo `campo`
que 'campo'

Visualmente parecerían lo mismo, pero son cosas absolutamente distintas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT
    ->   'valor' cadena,
    ->   `valor` campo
    -> FROM tabla;
+--------+-------+
| cadena | campo |
+--------+-------+
| valor  |     1 |
| valor  |     2 |
| valor  |     3 |
| valor  |     4 |
| valor  |     5 |
+--------+-------+
5 rows in set (0.00 sec)

¿se entiende el problema? Tal como lo estás poniendo, estás comparando dos CADENAS y el resultado siempre será VERDADERO.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mysql> SELECT
    ->   descripcion,
    ->   minimo,
    ->   existencia,
    ->   IF('minimo' > 'existencia', 1, 0) AS como_lo_pones,
    ->   IF(`minimo` > `existencia`, 1, 0) AS como_lo_debes_poner,
    ->   IF(minimo > existencia, 1, 0) AS asi_tambien_funciona
    -> FROM tabla;
+-------------+--------+------------+---------------+---------------------+----------------------+
| descripcion | minimo | existencia | como_lo_pones | como_lo_debes_poner | asi_tambien_funciona |
+-------------+--------+------------+---------------+---------------------+----------------------+
| uno         |     10 |         11 |             1 |                   0 |                    0 |
| dos         |     10 |         10 |             1 |                   0 |                    0 |
| tres        |     10 |          9 |             1 |                   1 |                    1 |
+-------------+--------+------------+---------------+---------------------+----------------------+
3 rows in set (0.00 sec)

Da lo mismo si pones el ACENTO GRAVE o no pones nada, pero POR NINGÚN MOTIVO DEBES DE PONER COMILLAS SIMPLES.

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

correccion de consulta

Publicado por sebastian (4 intervenciones) el 21/11/2017 21:51:47
hola leo.
muchas gracias ya me sirvió la consulta que pena con esas horrores, pero es la primera vez que estoy trabajando con esto, estoy apenas aprendiendo , pero de verdad muchas gracias me has salvado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar