CROSS JOINS CON NULLS

03/01/2007 - 09:44 por Txarlie | Informe spam
Hola:

Tengo un problema con una consulta. Tengo dos tablas que quiero
relacionar mediante un CROSS JOIN, pero pierdo valores por culpa de
valores NULL.

La tabla A tiene los campos ID y DESCRIPCION. La tabla B tiene
IDASPECTO, IDTIPO, IDSUBTIPO, VALOR.

El problema es que la tabla B, en alguno de sus registros, el campo
IDSUBTIPO está a NULL (en otros no) y al hacer el cross join no
devuelve esos campos.

Sólo se me ocurre hacerlo medianto un cursor, pero me gustaría
evitarlo (¡Mata a un cursor!).

¿Hay alguna claúsula que no haya visto al usar CROSS JOIN? ¿Se puede
hacer un CROSS INNER JOIN o algo así? ¿El cursor acará siendo la
mejor opción?

Gracias por adelantado,

Preguntas similare

Leer las respuestas

#1 Maxi
03/01/2007 - 13:15 | Informe spam
Hola y porque usar un CROSS y no un LEFT JOIN?


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Txarlie" escribió en el mensaje
news:
Hola:

Tengo un problema con una consulta. Tengo dos tablas que quiero
relacionar mediante un CROSS JOIN, pero pierdo valores por culpa de
valores NULL.

La tabla A tiene los campos ID y DESCRIPCION. La tabla B tiene
IDASPECTO, IDTIPO, IDSUBTIPO, VALOR.

El problema es que la tabla B, en alguno de sus registros, el campo
IDSUBTIPO está a NULL (en otros no) y al hacer el cross join no
devuelve esos campos.

Sólo se me ocurre hacerlo medianto un cursor, pero me gustaría
evitarlo (¡Mata a un cursor!).

¿Hay alguna claúsula que no haya visto al usar CROSS JOIN? ¿Se puede
hacer un CROSS INNER JOIN o algo así? ¿El cursor acará siendo la
mejor opción?

Gracias por adelantado,
#2 Txarlie
03/01/2007 - 14:00 | Informe spam
El LEFT JOIN o el RIGHT me omite los valores NULLS... Y eso provoca que
al final no pueda llegar a hacer un SUM de una serie de valores.

Me veo haciendo el cursor. Gracias.

Maxi ha escrito:

Mostrar la cita
#3 Txarlie
03/01/2007 - 15:46 | Informe spam
Gracias por el interés. Os envío más datos. Ahora he ido retocando
la consulta a ver si lograba sacar algo en claro. Esta es la Select que
me elimina los nulls. Tiene un CROSS JOIN y un INNER JOIN, porque
necesito que intervengan 3 tablas.

La CROSS JOIN entre la tabla #Plantas y la tabla #Aspec_Tipos me
devuelve los registros que necesito. A eso le hago llamar Tabla1. El
problema exactamente está al hacer INNER JOIN del resultado de esa
CROSS JOIN con la Tabla2.

SELECT Tabla1.ID_CODELE, Tabla1.ID_ASPECTO, Tabla1.ID_TIPO,
Tabla1.ID_SUBTIPO, SUM(CAST(Tabla2.VL_CMPASPAMB AS INT)) AS SEMAFORO
FROM (SELECT #PLANTAS.ID_CODELE, #ASPEC_TIPOS.ID_ASPECTO,
#ASPEC_TIPOS.ID_TIPO,#ASPEC_TIPOS.ID_SUBTIPO
FROM #PLANTAS CROSS JOIN #ASPEC_TIPOS) AS Tabla1
INNER JOIN Tabla2 ON
Tabla2.ID_CODELE = Tabla1.ID_CODELE AND
Tabla2.ID_CODASPAMB = Tabla1.ID_ASPECTO AND
Tabla2.ID_TIPASPAMB = Tabla1.ID_TIPO AND
Tabla2.ID_STPASPAMB = Tabla1.ID_SUBTIPO
GROUP BY Tabla1.ID_CODELE, Tabla1.ID_ASPECTO, Tabla1.ID_TIPO,
Tabla1.ID_SUBTIPO, Tabla2.VL_CMPASPAMB
ORDER BY Tabla1.ID_CODELE, Tabla1.ID_ASPECTO

No hay ni un sólo WHERE, pero hay un GROUP. El problema imagino que
estará en los campos ID_SUBTIPO que en algunos casos es NULL. Y en vez
de agruparme los campos y establecer su valor a NULL, me los omite.

Gracias por las respuestas. Un saludo,



Alejandro Mesa ha escrito:

Mostrar la cita
Ads by Google
Search Busqueda sugerida