MySQL - Consulta recursiva

   
Vista:

Consulta recursiva

Publicado por Pablo (9 intervenciones) el 19/01/2015 00:17:33
¿Cómo puedo realizar una consulta recursiva en MySQL?.

Es decir, quiero obtener el desglose de todos los pedidos que tienen "portes" y hago lo siguiente:

1
SELECT * FROM ventas WHERE pedido IN (SELECT pedido FROM ventas WHERE ItemNo = 'transporte');

No me da error de sintaxis, pero el resultado es 0 registros, cuando la tabla tiene alrededor de 40.000 registros y el concepto transporte va en al menos 5.000 pedidos.
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
Imágen de perfil de xve

Consulta recursiva

Publicado por xve (898 intervenciones) el 19/01/2015 08:10:22
Hola Pablo, no se si te he entendido bien, pero creo que con un simple consulta sql tienes el mismo resultado mucho mas rápido, no?

algo así:
SELECT *
FROM ventas
WHERE ItemNo='transporte'

La clausula IN ... si son muchos registros, las consultas se hacen eternas, no es muy óptimo.

Coméntanos, ok?
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

Consulta recursiva

Publicado por Pablo (9 intervenciones) el 19/01/2015 10:26:59
Gracias XVE por tu ayuda.

Tengo pedidos con portes y sin portes.

Necesito conocer el contenido de los pedidos que llevan portes. Por eso he pensado en algo recursivo: primero averiguo qué pedidos llevan portes y después que me de el contenido de los pedidos IN la primera selección.

Ahora lo que hago es generar una tabla con la primera consulta y después relacionar ambas tablas. He pensado que quizá habría una forma un poco más "profesional" de hacerlo.

Como lo hago una vez al año, en principio no importa mucho la velocidad.
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
Imágen de perfil de xve

Consulta recursiva

Publicado por xve (898 intervenciones) el 19/01/2015 17:04:40
No se si es que no lo se ver, pero aquí, estas utilizando la misma tabla:
1
SELECT * FROM ventas WHERE pedido IN (SELECT pedido FROM ventas WHERE ItemNo = 'transporte');
por lo que entiendo, el resultado es el mismo que este:
1
SELECT * FROM ventas WHERE ItemNo='transporte'

No es así? no devuelve los mismos registros?
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

Consulta recursiva

Publicado por Pablo (9 intervenciones) el 20/01/2015 14:42:43
Gracias de nuevo por tu tiempo.

No, vamos a ver: Tengo una tabla llamada 'ventas' con una serie de campos: Nº de cliente, Nombre del cliente, Nº de pedido, Pedido del Cliente, Artículo, Unidades, Precio Unitario, Valor Línea, etc...

Hay un registro por cada artículo (ya que pueden salir de este o aquél almacen).

Entonces, un pedido tendrá varios registros. El Nº de pedido será común a todos ellos.

Necesito conocer qué pedidos llevan portes, y el contenido de esos pedidos. Es decir, tengo que:

primero averiguar que Números de pedido tienen asociado un articulo llamado "transporte",
y una vez que sepa cuales son, averiguar qué otros artículos componen esos pedidos.
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

Consulta recursiva

Publicado por Hugo (30 intervenciones) el 23/01/2015 20:23:28
hola haslo de esta manera.

SELECT * FROM ventas
INNER JOIN (SELECT pedido FROM ventas WHERE ItemNo = 'transporte') porte ON ventas.pedido = porte.pedido;

espero te sirva.

saludos.
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