Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

select elementos de una tabla que no estan en otra

Estas en el tema de select elementos de una tabla que no estan en otra en el foro de SQL Server en Foros del Web. buenas tardes, cual seria la estructura de una consulta para extraer todos los registros de una tabla cuyo campo clave no está en otra tabla? ...
  #1 (permalink)  
Antiguo 22/04/2009, 12:53
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 22 años, 3 meses
Puntos: 2
select elementos de una tabla que no estan en otra

buenas tardes,

cual seria la estructura de una consulta para extraer todos los registros de una tabla cuyo campo clave no está en otra tabla?

un saludo,
josé carlos.
  #2 (permalink)  
Antiguo 22/04/2009, 12:56
Avatar de Dradi7  
Fecha de Ingreso: junio-2008
Ubicación: Peru - Lima
Mensajes: 1.518
Antigüedad: 16 años, 5 meses
Puntos: 220
Respuesta: select elementos de una tabla que no estan en otra

Ojala q te Sirva

Select * From Tabla1 where Not Codigo In (Select Codigo From Tabla2)
__________________
La clave de todo triunfador es eliminar todas sus excusas y sus limitaciones
  #3 (permalink)  
Antiguo 22/04/2009, 13:54
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 11 meses
Puntos: 38
Respuesta: select elementos de una tabla que no estan en otra

Una alternativa mas...(te encontraras esta pregunta en entrevistas de SQL ya que es un problema muy comun).

Código:
Select T1.* 
From Tabla1  T1
Left Outer Join
       Tabla2  T2
ON   T1.Codigo = T2.Codigo 
where T2.Codigo is null
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #4 (permalink)  
Antiguo 22/04/2009, 14:11
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 22 años, 3 meses
Puntos: 2
Respuesta: select elementos de una tabla que no estan en otra

esta creo que sería otra:

select tabla1.* from tabla1,tabla2 where NOT tabla1.codigo = tabla2.codigo

pero cual sería la mas eficiente?

un saludo,
josé carlos.
  #5 (permalink)  
Antiguo 22/04/2009, 14:50
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 11 meses
Puntos: 38
Respuesta: select elementos de una tabla que no estan en otra

tu opcion genera un cross join entre las dos tablas, lo que significa que primero hace un producto cartesiano y luego en el where descarta todas las combinaciones que no coinciden con tus filtros.

Las subconsultas yo prefiero evitarlas o restringirlas para cuando se que retornara una cantidad pequena de registros.

La mejor opcion para mi (me ha dado mejores resultados), cuando son muchos registros es utilizar joins explicitos..

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #6 (permalink)  
Antiguo 22/04/2009, 14:57
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 22 años, 3 meses
Puntos: 2
Respuesta: select elementos de una tabla que no estan en otra

gracias,

un saludo,
josé carlos.
  #7 (permalink)  
Antiguo 22/04/2009, 21:07
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 4 meses
Puntos: 180
Respuesta: select elementos de una tabla que no estan en otra

Ademas, como un simple complemento, esto:

select tabla1.* from tabla1,tabla2 where NOT tabla1.codigo = tabla2.codigo

Es codificacion antigua, es recomendable el uso de JOIN
  #8 (permalink)  
Antiguo 24/04/2009, 05:45
 
Fecha de Ingreso: febrero-2009
Mensajes: 312
Antigüedad: 15 años, 9 meses
Puntos: 4
Respuesta: select elementos de una tabla que no estan en otra

Hola.

He tocado poco Oracle, pero en éste, se haría como indica evoarte y creo que lo de los cross join, left, etc... no existen.

Me gustaría ver una comparación exacta de rendimiento, si sabeis de alguna.

Gracias y saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:58.