Geeks•ms
Todo lo que los geeks de Windows y .Net tienen que contar
Plain Concepts SQL Server Tour
[Code] Cómo consultar los registros no asociados con otros registros de la misma tabla

MVP

Código QR

Syndication

MCS Specialist

Red de Conocimiento

 Detectar si un determinado usuario tiene o no autorización para realizar alguna tarea, detectar cuales de los ítems no ha sido asociados a él es tan solo algunas de las aplicaciones para éste artículo.

Como primera instancia tenemos una tabla de ejemplo, que se genera usando:

declare @t1 table (id int, VALOR CHAR(1))

 

insert into

@t1 values (1, 'A')
insert into @t1 values (2, 'B')
insert into @t1 values (3, 'C')
insert into @t1 values (4, 'D')
insert into @t1 values (5, 'E')

select

* from @t1

id VALOR
1 A
2 B
3 C
4 D
5 E

Queremos saber por cada uno de los valores en la columna Id, cuales de los valores en la columna VALOR no están asociados con un Id

Es decir que para el Id 1, los valores deben ser B,C,D,E

La primera aproximación para saber cual de los VALORES está aplicado a cada uno de los Id es realizar un Cross Join

SELECT

* from @t1 t1 cross join @t1 t2

id VALOR id VALOR
1 A 1 A
2 B 1 A
3 C 1 A
4 D 1 A
5 E 1 A
1 A 2 B
2 B 2 B
3 C 2 B
4 D 2 B
5 E 2 B
1 A 3 C
2 B 3 C
3 C 3 C
4 D 3 C
5 E 3 C
1 A 4 D
2 B 4 D
3 C 4 D
4 D 4 D
5 E 4 D
1 A 5 E
2 B 5 E
3 C 5 E
4 D 5 E
5 E 5 E

Se nota en ésta combinación que 1 ya está asociado con A en la fila         y notamos que en las columnas         vemos que los valos con 1 no están asociados

Por lo que si creamos un condición podemos eliminar los que ya están asociados dejando solo los que NO están asociados

SELECT t2.id, t1.VALOR from @t1 t1 cross join @t1 t2 where not (t1.id = t2.id and t2.VALOR = t2.VALOR )

id VALOR
1 B
1 C
1 D
1 E
2 A
2 C
2 D
2 E
3 A
3 B
3 D
3 E
4 A
4 B
4 C
4 E
5 A
5 B
5 C
5 D

 

 

Espero sea de ayuda

 

FREDY LEANDRO ANGARITA CASTELLANOS
Sql Server MVP


Enviado 6/9/2011 12:24 por Freddy Angarita
Comparte este post:

Comentarios

MVP Factor escrito Agenda MVP (12 de septiembre – 18 de septiembre)
en 13/9/2011 22:53

Agenda MVP (12 de septiembre – 18 de septiembre) Artículos Cómo consultar los registros no asociados

Sigue a Plain Concepts en Twitter