Select

02/09/2007 - 01:45 por Clara | Informe spam
Hola,
Teniendo una tabla T1 (codigoA int, codigoB int), y otra tabla T2 (codigoB
int), es posible obtener aquellas filas de T1 (distinct) para las que no
existe ningun registro relacionado en T2?

Ejemplo:
T1:
CodigoA CodigoB
1 12
1 13
1 14
2 10
3 12
3 13

T2:
CodigoB
12

El resultado deberia ser solo el registro 2 (CodigoA = 2) de T1 (porque para
CodigoA = 1 -->existe un CodigoB = 12; y para CodigoA=3 existe tambien un
CodigoB = 12)


Uso SS2005

Grácias.

Preguntas similare

Leer las respuestas

#1 Clara
02/09/2007 - 13:36 | Informe spam
He encontrado una solución pero no sé si es muy rebuscada.
Se trata de que a partir de una tabla (#t1), obtener aquellos registros para
la que SI existen registros en otra tabla (#e) y para la que NO existen en
otra (#ne)

create table #t1 (cA int, cB int) // tabla donde buscar
create table #e (cB int) //tabla que contiene los registros relacionados que
deben existir
create table #Ne (cB int) //tabla que contien los registro relacionados que
NO deben existir

insert into #t1 values (1, 12)
insert into #t1 values (1, 13)
insert into #t1 values (1, 14)
insert into #t1 values (2, 13)
insert into #t1 values (3, 12)
insert into #t1 values (3, 15)

insert into #e values (13) //en #t1 deben existir registros donde cB sea
igual a 13
insert into #Ne values (12) // en #t1 no deben existir registros donde cB
sea igual a 12


select distinct cA from #t1 T inner join #e E on T.cB = E.cb
where
exists (select * from #e where cB = T.CB)
and
T.cA not in (select cA from #t1 where CB in (select cB from #Ne))


drop table #Ne
drop table #t1
drop table #e

Esto devuelve solo un registro dónde cA = 2 ( y es lo que quiero)
En este ejemplo #e y #Ne solo tienen un registro, pero en realidad es
posible que tengan varios (no muchos. máximo unos 30)

hay alguna forma más simple?

Grácias.
Respuesta Responder a este mensaje
#2 Alejandro Mesa
02/09/2007 - 19:50 | Informe spam
Trata:

;with codigoA_que_existen
as(
select a.codigoA
from t1 as a inner join t2 as b
on a.codigoB = b.codigoB
)
select distinct a.codigoA
from t1 as a
where not exists (
select *
from codigoA_que_existen as b
where b.codigoA = a.codigoA
);

AMB

"Clara" wrote:

Hola,
Teniendo una tabla T1 (codigoA int, codigoB int), y otra tabla T2 (codigoB
int), es posible obtener aquellas filas de T1 (distinct) para las que no
existe ningun registro relacionado en T2?

Ejemplo:
T1:
CodigoA CodigoB
1 12
1 13
1 14
2 10
3 12
3 13

T2:
CodigoB
12

El resultado deberia ser solo el registro 2 (CodigoA = 2) de T1 (porque para
CodigoA = 1 -->existe un CodigoB = 12; y para CodigoA=3 existe tambien un
CodigoB = 12)


Uso SS2005

Grácias.



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