Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problemas con selects múltiples..

Estas en el tema de Problemas con selects múltiples.. en el foro de Mysql en Foros del Web. Hola amigos del foro necesito su ayuda para resolver esto, os comento: Tengo que hacer un listado, muy personalizado, que tiene que mostrar Productos de ...
  #1 (permalink)  
Antiguo 10/01/2008, 11:18
Avatar de paskiller  
Fecha de Ingreso: marzo-2005
Mensajes: 13
Antigüedad: 19 años, 1 mes
Puntos: 0
Exclamación Problemas con selects múltiples..

Hola amigos del foro necesito su ayuda para resolver esto, os comento:

Tengo que hacer un listado, muy personalizado, que tiene que mostrar Productos de Alimentación con sus códigos, descripciones y precios (tanto por unidad, como por caja y precio de venta)...

El tema es que no he sabido sacar toda la información que me pedían en menos de 4 Selects, ya que habían algunos campos como las tarifas que para obtenerlas tenía que hacer varias consultas.

El caso es que me habían dicho que con UNION, podía hacer varias consultas y al final unirlas y las columnas que no coincidieran aparecerían también. Probando y probando he visto que me obliga a que tengan el mismo número de campos y eso me parte mis ilusiones.

Ilustro mi problema con un ejemplo así se entiende mejor:

Código PHP:
SELECT e.CODARTP as Códigoe.UNICOMPO as Unidadese.DESCARTC as Descripciónc.DESCCAR as FLOyBIOt.PRECIO as T1uni
FROM ESCANDALLO 
as e  LEFT OUTER JOIN ARTICULO as a2 ON (e.CODARTC a2.CODART)
LEFT OUTER JOIN TARIFAVE as t ON (a2.CODART t.CODART)
LEFT OUTER JOIN CARACTERISTICAS as c ON (a2.CAR2 c.CODCAR)
WHERE e.CODARTP IN (
    
SELECT a1.CODART as Código
    FROM ARTICULO 
as a1
    WHERE a1
.CODART like '%K'
    
AND a1.CAR7='       3'
    
)
AND 
t.TARIFA='       1'
AND t.FECMAX='31/12/9999'
AND c.NUMCAR='2'
GROUP BY a2.CAR4e.CODARTPe.UNICOMPOe.DESCARTCc.DESCCARt.PRECIO
UNION
SELECT e
.CODARTP as Códigoe.UNICOMPO as Unidadese.DESCARTC as Descripciónc.DESCCAR as FLOyBIOt.PRECIO as PVPuni
FROM ESCANDALLO 
as e  LEFT OUTER JOIN ARTICULO as a2 ON (e.CODARTC a2.CODART)
LEFT OUTER JOIN TARIFAVE as t ON (a2.CODART t.CODART)
LEFT OUTER JOIN CARACTERISTICAS as c ON (a2.CAR2 c.CODCAR)
WHERE e.CODARTP IN (
    
SELECT a1.CODART as Código
    FROM ARTICULO 
as a1
    WHERE a1
.CODART like '%K'
    
AND a1.CAR7='       3'
    
)
AND 
t.TARIFA='PVP'
AND t.FECMAX='31/12/9999'
AND c.NUMCAR='2'
GROUP BY a2.CAR4e.CODARTPe.UNICOMPOe.DESCARTCc.DESCCARt.PRECIO 
Como podéis ver he puesto un ejemplo en el que ya tengo los campos igualados, en la 1a Select hay un campo t.PRECIO as T1uni y en la 2a hay un campo t.PRECIO as PVPuni.

Ambos me dan valores diferentes pero al hacer la UNION los valores de la 2a select desaparecen, supongo porque son el mismo campo.

Alguien sabe como puedo hacer lo que quiero?

Muchas gracias a todos!
  #2 (permalink)  
Antiguo 10/01/2008, 13:07
Avatar de pragone  
Fecha de Ingreso: diciembre-2007
Ubicación: Madrid
Mensajes: 223
Antigüedad: 16 años, 4 meses
Puntos: 2
Re: Problemas con selects múltiples..

De la documentación de la sintaxis del Union:

Cita:
Si no usa la palabra clave ALL para UNION, todos los registros retornados son únicos, como si hubiera hecho un DISTINCT para el conjunto de resultados total. Si especifica ALL, obtiene todos los registros coincidentes de todos los comandos SELECT usados.
Mira en: http://dev.mysql.com/doc/refman/5.0/es/union.html

Otra forma es que coloques la tarifa como un campo en el query... así además sabrás a qué tarifa se refiere el precio que obtienes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:29.