21/10/2004, 12:54
|
| | | Fecha de Ingreso: marzo-2002 Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 9 meses Puntos: 7 | |
Encontré un documento en esta página ( http://www.programacion.com/tutorial/sql/8/ ) que dice lo siguiente: Cita: Referente a los JOIN, no funcionan en ORACLE y además no conozco una sintaxis que funcione en los tres sistemas. La sintaxis en ORACLE es igual a la sentencia anterior pero añadiendo los caracteres (+) detrás del nombre de la tabla en la que deseamos aceptar valores nulos, esto equivale a un LEFT JOIN:
SELECT Facturas.*, Albaranes.* FROM Facturas, Albaranes
WHERE Facturas.IdAlbaran = Albaranes.IdAlbaran (+) AND Facturas.IdCliente = 325
Y esto a un RIGHT JOIN:
SELECT Facturas.*, Albaranes.* FROM Facturas, Albaranes
WHERE Facturas.IdAlbaran (+) = Albaranes.IdAlbaran AND Facturas.IdCliente = 325 Hice mi Consulta de la siguiente manera:
Código:
Select * from OpenQuery(DESARROLLO,'
SELECT Mcshierb.PARENT, Mcshierb.Name, MAKT.MAKTX, SUBSTR(S021.Sptag,5,2), SUBSTR(S021.Sptag,1,4), sum(S021.PSMNG) AS total
FROM Mcshierb, MAKT, S021
WHERE Mcshierb.Appl = ''MCS''
And Mcshierb.Hname = ''CLAS-MAT01''
And Mcshierb.MANDT = 210
And (Mcshierb.PARENT = 14 or Mcshierb.PARENT = 15 or Mcshierb.PARENT = 16 or Mcshierb.PARENT = 17)
And Mcshierb.Name = MAKT.MATNR
And Mcshierb.MANDT = MAKT.MANDT
And MAKT.SPRAS = ''S''
And Mcshierb.MANDT = S021.MANDT (+)
And Mcshierb.Name = S021.MATNR (+)
And ( S021.Sptag >= ''20040801'' And S021.Sptag <= ''20040831'' )
GROUP BY Mcshierb.PARENT, Mcshierb.Name, MAKT.MAKTX, SUBSTR(Sptag,5,2), SUBSTR(Sptag,1,4)
Order By Mcshierb.PARENT,Mcshierb.Name
')
Si se fijan, le puse a los dos campos los cuales quiero que me realice el LEFT JOIN el signo de (+). El select me funciona pero como si fuera INNER JOIN, no me está haciendo el efecto del LEFT JOIN.
Probé asi tambien y nada, sigue funcionando como un INNER JOIN:
Código:
Select * from OpenQuery(DESARROLLO,'
SELECT Mcshierb.PARENT, Mcshierb.Name, MAKT.MAKTX, SUBSTR(S021.Sptag,5,2), SUBSTR(S021.Sptag,1,4), sum(S021.PSMNG) AS total
FROM Mcshierb, MAKT, S021
WHERE Mcshierb.Appl = ''MCS''
And Mcshierb.Hname = ''CLAS-MAT01''
And Mcshierb.MANDT = 210
And (Mcshierb.PARENT = 14 or Mcshierb.PARENT = 15 or Mcshierb.PARENT = 16 or Mcshierb.PARENT = 17)
And Mcshierb.Name = MAKT.MATNR
And Mcshierb.MANDT = MAKT.MANDT
And MAKT.SPRAS = ''S''
And Mcshierb.MANDT (+) = S021.MANDT
And Mcshierb.Name (+) = S021.MATNR
And ( S021.Sptag >= ''20040801'' And S021.Sptag <= ''20040831'' )
GROUP BY Mcshierb.PARENT, Mcshierb.Name, MAKT.MAKTX, SUBSTR(S021.Sptag,5,2), SUBSTR(S021.Sptag,1,4)
Order By Mcshierb.PARENT,Mcshierb.Name
')
Pensé que era que tenía que ponerlo en el campo fecha también. Me decidí a ponerle el (+) y me explotó. Que estoy haciendo mal?
__________________ .::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--
Última edición por RsOfT; 21/10/2004 a las 13:04 |