Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   filtrar 2 tablas (https://www.clubdelphi.com/foros/showthread.php?t=74958)

BlueSteel 20-07-2011 23:12:56

filtrar 2 tablas
 
Estimados, tengo un problema, y es que tengo 2 tablas diferentes

Persona
Per_Rut
Per_Nombre
Per_Apellido
Per_Estado

EscuelaEsc_Id
Esc_Fecha
Esc_Vigencia
Esc_Estado

necesito mostrar todos los registros que esten en la tabla Persona pero que no esten en la tabla Escuela. Las tablas estan relacionadas por el campo Per_Rut

la cosa es que en estos momentos estoy con un lapsus.. y no me acuerdo como realizar dicho filtro....:confused::confused::confused:


Salu2:p:cool:

Caral 20-07-2011 23:20:02

Hola
A ver asi:
Código SQL [-]
SELECT * FROM Persona
WHERE NOT EXISTS (SELECT * FROM Escuela WHERE Persona.Per_Rut =  Escuela.Per_Rut );
Saludos

ContraVeneno 21-07-2011 01:21:31

Código SQL [-]
Select P.per_Nombre, P.per_Rut
from Persona P
Left outer join Escuela E on P.Per_Rut = E.Per_Rut
Where E.Per_Rut is null

estoy suponiendo que el campo de enlace es el mismo en las dos tablas...

BlueSteel 23-07-2011 00:25:32

Estimados....

las 2 consulas funcionaron bien.... pero la de Contraveneno es más eficaz...

Código SQL [-]
SELECT dbo.Persona.Per_Rut, dbo.Persona.Per_Nombres + ' ' + dbo.Persona.Per_Apellidos AS Nombre, 
dbo.Persona.Per_Nombres, dbo.Persona.Per_Apellidos, dbo.Persona.Per_Estado, dbo.Persona.Tip_Id, 
dbo.Persona.Per_Sorteo, dbo.TipoPersona.Tip_Detalle FROM         dbo.Persona INNER JOIN dbo.TipoPersona ON 
dbo.Persona.Tip_Id = dbo.TipoPersona.Tip_Id WHERE     
(NOT EXISTS  (SELECT     Esc_Id, Per_Rut, 
Esc_Fecha, Esc_Vigencia, Abo_Id, Esc_Estado  FROM dbo.Escuela  
WHERE  (dbo.Persona.Per_Rut = Per_Rut))) AND 
(dbo.Persona.Tip_Id = '06') OR  (dbo.Persona.Tip_Id = '07')


aki la otra sentencia

Código SQL [-]
dbo.Persona.Per_Rut AS Rut, dbo.Persona.Per_Nombres + ' ' + dbo.Persona.Per_Apellidos AS Nombre, 
dbo.Persona.Per_Nombres, dbo.Persona.Per_Apellidos, dbo.Persona.Per_Estado, dbo.Persona.Tip_Id, 
dbo.Persona.Per_Sorteo, dbo.TipoPersona.Tip_Detalle FROM         dbo.Persona 
INNER JOIN dbo.TipoPersona ON dbo.Persona.Tip_Id = dbo.TipoPersona.Tip_Id 
LEFT OUTER JOIN  dbo.Escuela ON dbo.Persona.Per_Rut = dbo.Escuela.Per_Rut 
WHERE (dbo.Escuela.Per_Rut IS NULL) AND (dbo.Persona.Tip_Id = '06') OR  (dbo.Persona.Tip_Id = '07')



Ahora, otra pregunta... yo estas consultas las utilizo como vistas... ya que son solo para mostrar datos y/o consultar.... esto quita rendimiento???


Salu2

ContraVeneno 23-07-2011 00:37:23

Hasta donde mis amplios y vastos conocimientos sobre el motor de base de datos propiedad de Microsoft, al cuál llamamos Microsoft SQL Server, para cualquier de sus versiones, me permiten aseverar: no


La franja horaria es GMT +2. Ahora son las 23:48:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi