Relacionar campos de dos tablas con nulos

28/12/2004 - 18:15 por Jose | Informe spam
Hola a todos:
Tengo que obtener unos informes de una bd de un cliente, para lo cual he
generado una consulta que me relaciona campos de dos tablas, pero resulta
que uno de los campos tiene valores nulos en ambas tablas. El resultado
obtenido excluye los registros con nulos en los campos relacionados. Por
ejemplo:

Tabla1
ID1 ID2 Dato1
aa aaa 1
bb <NULL> 2

Tabla2
ID1 ID2 Dato2
aa aaa 11
bb <NULL> 22

El resultado de la consulta
SELECT dbo.Tabla1.ID1, dbo.Tabla1.ID2, dbo.Tabla1.Dato1,
dbo.Tabla2.Dato2
FROM dbo.Tabla1 INNER JOIN dbo.Tabla2 ON dbo.Tabla1.ID1 =
dbo.Tabla2.ID1 AND dbo.Tabla1.ID2 = dbo.Tabla2.ID2

sería

ID1 ID2 Dato1 Dato2
aa aaa 1 11

Habría alguna manera de que me saliese también?
bb <NULL> 2 22

Podría actualizar los datos NULL a vacío, pero habría que hacerlo cada vez
que se obtenga el informe. Es posible hacer la relación de manera que si el
campo es nulo en ambos registros los relacione también?

Gracias a todos por anticipado

Preguntas similare

Leer las respuestas

#6 Maxi
28/12/2004 - 19:10 | Informe spam
ok, fijate este ejemplo:

=
CREATE TABLE #PEPE (ID1 VARCHAR(100), ID2 VARCHAR(100))
GO

CREATE TABLE #PEPE2 (ID1 VARCHAR(100), ID2 VARCHAR(100))
GO

INSERT INTO #PEPE VALUES ('1',NULL)
INSERT INTO #PEPE VALUES ('1','1')
INSERT INTO #PEPE VALUES ('1','2')

INSERT INTO #PEPE2 VALUES ('1',NULL)
INSERT INTO #PEPE2 VALUES ('1','1')
INSERT INTO #PEPE2 VALUES ('1','2')

SELECT * FROM #PEPE P INNER JOIN #PEPE2 P2 ON
ISNULL(P.ID1,0) = ISNULL(P2.ID1,0) AND
ISNULL(P.ID2,0) = ISNULL(P2.ID2,0)

=

Salu2
Maxi


"Jose" escribió en el mensaje
news:%
Si. Lo que he mostrado es un ejemplo y de id1 hay varios valores, al igual
que de id2.
¿Podrías especificar un poco más cómo convertir ese nulo en algo cuando
ejecuto la consulta, por favor?

Gracias


"Maxi" escribió en el mensaje
news:
Entiendo, pero si son nulos de ambos lados no le veo el sentido
vincularlo a menos que por id1 tengas mas de un valor, eso es asi?

podrias tambien usar isnull() para convertir el nulo en algo, por ejemplo
0


Salu2
Maxi


"Jose" escribió en el mensaje
news:
Porque con la consulta lo que hago es agrupar usando los dos campos
coincidentes y sumar los datos

Gracias por tu interés.


"Maxi" escribió en el mensaje
news:%
Hola Jose, y porque no relacionar por un solo campo?


Salu2
Maxi


"Jose" escribió en el mensaje
news:
Hola a todos:
Tengo que obtener unos informes de una bd de un cliente, para lo cual
he generado una consulta que me relaciona campos de dos tablas, pero
resulta que uno de los campos tiene valores nulos en ambas tablas. El
resultado obtenido excluye los registros con nulos en los campos
relacionados. Por ejemplo:

Tabla1
ID1 ID2 Dato1
aa aaa 1
bb <NULL> 2

Tabla2
ID1 ID2 Dato2
aa aaa 11
bb <NULL> 22

El resultado de la consulta
SELECT dbo.Tabla1.ID1, dbo.Tabla1.ID2, dbo.Tabla1.Dato1,
dbo.Tabla2.Dato2
FROM dbo.Tabla1 INNER JOIN dbo.Tabla2 ON dbo.Tabla1.ID1 =
dbo.Tabla2.ID1 AND dbo.Tabla1.ID2 = dbo.Tabla2.ID2

sería

ID1 ID2 Dato1 Dato2
aa aaa 1 11

Habría alguna manera de que me saliese también?
bb <NULL> 2 22

Podría actualizar los datos NULL a vacío, pero habría que hacerlo cada
vez que se obtenga el informe. Es posible hacer la relación de manera
que si el campo es nulo en ambos registros los relacione también?

Gracias a todos por anticipado

















Respuesta Responder a este mensaje
#7 Jose
28/12/2004 - 19:18 | Informe spam
Desafortunadamente el diseño de la BD no es mía, y supongo que la aplicación
que la utiliza daría problemas si lo cambiase.
El campo ID2 puede ser nulo o no, es decir podría tener otro registro del
tipo. La consulta que realmente quiero haver es algo como

SELECT dbo.Tabla1.ID1, dbo.Tabla1.ID2, SUM(dbo.Tabla1.Dato1) AS Expr1,
SUM(dbo.Tabla2.Dato2) AS Expr2
FROM dbo.Tabla1 INNER JOIN
dbo.Tabla2 ON dbo.Tabla1.ID1 = dbo.Tabla2.ID1 AND
dbo.Tabla1.ID2 = dbo.Tabla2.ID2
GROUP BY dbo.Tabla1.ID1, dbo.Tabla1.ID2

Pero el problema está en la relación con los nulos, que me exluye el
registro de la tabla relacionada cuando es nulo

¿Como podría asegurar en la consulta que ID2 es null para que lo incluya en
la consulta al agrupar?

Saludos


"Asterion" escribió en el mensaje
news:
Podés hacerlo con una unión.

La consulta que pusiste está bien. Esta sería la primera parte de la
unión.
Si la segundas llaves de la tablas pueden ser nulas, entonces tendrías que
hacer una consulta que haga el join por el ID1 y se asegure que el ID2 sea
vacío en ambas tablas a la vez.

De todas maneras podrías reconsiderar la conveniencia de tener una tabla
que
permita una clave nula. Por ahí te conviene más agregar algún campo
autoincremental.

Respuesta Responder a este mensaje
#8 Asterion
28/12/2004 - 20:43 | Informe spam
Es perfectamente razonable que no puedas modificar las tablas
Podés lograr el resultado esperado con una union.
La idea es que la primer parte sea la consulta que escribiste, en tanto que
la segunda parte considere a todos los registros que tengan null en ID2.

Tomando como base la consulta posteada al inicio del hilo, queda de esta forma

SELECT dbo.Tabla1.ID1, dbo.Tabla1.ID2, dbo.Tabla1.Dato1,
dbo.Tabla2.Dato2
FROM dbo.Tabla1 INNER JOIN dbo.Tabla2 ON dbo.Tabla1.ID1 =
dbo.Tabla2.ID1 AND dbo.Tabla1.ID2 = dbo.Tabla2.ID2
UNION
SELECT dbo.Tabla1.ID1, dbo.Tabla1.ID2, dbo.Tabla1.Dato1,
dbo.Tabla2.Dato2
FROM dbo.Tabla1 INNER JOIN dbo.Tabla2 ON dbo.Tabla1.ID1 =
dbo.Tabla2.ID1 AND dbo.Tabla1.ID2 IS NULL AND dbo.Tabla2.ID2 IS NULL

Suerte!.
Respuesta Responder a este mensaje
#9 Jose
29/12/2004 - 10:16 | Informe spam
Gracias por vuestra ayuda. Ambas sugerencias creo que son válidas, aunque al
final he aplicado la de Maxi y funciona perfectamente.

Feliz año a todos.


"Jose" escribió en el mensaje
news:
Hola a todos:
Tengo que obtener unos informes de una bd de un cliente, para lo cual he
generado una consulta que me relaciona campos de dos tablas, pero resulta
que uno de los campos tiene valores nulos en ambas tablas. El resultado
obtenido excluye los registros con nulos en los campos relacionados. Por
ejemplo:

Tabla1
ID1 ID2 Dato1
aa aaa 1
bb <NULL> 2

Tabla2
ID1 ID2 Dato2
aa aaa 11
bb <NULL> 22

El resultado de la consulta
SELECT dbo.Tabla1.ID1, dbo.Tabla1.ID2, dbo.Tabla1.Dato1,
dbo.Tabla2.Dato2
FROM dbo.Tabla1 INNER JOIN dbo.Tabla2 ON dbo.Tabla1.ID1 =
dbo.Tabla2.ID1 AND dbo.Tabla1.ID2 = dbo.Tabla2.ID2

sería

ID1 ID2 Dato1 Dato2
aa aaa 1 11

Habría alguna manera de que me saliese también?
bb <NULL> 2 22

Podría actualizar los datos NULL a vacío, pero habría que hacerlo cada vez
que se obtenga el informe. Es posible hacer la relación de manera que si
el campo es nulo en ambos registros los relacione también?

Gracias a todos por anticipado

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida