Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/10/2004, 12:54
Avatar de RsOfT
RsOfT
 
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 1 mes
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