Je veux comparer deux tables, source et cible, et get des lignes similaires.
Comparez la source et la cible sur l' Id
un par un et:
Je pense avoir besoin d'une expression récursive pour vérifier la source et la cible un par un
La source
x------x---------x | Id | Name | x------x---------x | 1 | a | | 2 | b | | 2 | c | | 3 | d | | 3 | e | | 4 | x | x------x---------x
Cible
x------x---------x | Id | Name | x------x---------x | 1 | f | | 1 | g | | 2 | h | | 3 | i | | 3 | j | | 5 | y | x------x---------x
Résultat
x------x---------x | Id | Name | x------x---------x | 1 | f | | 1 | g | | 2 | h | | 3 | i | | 3 | j | x------x---------x
Données de test
declare @s table(Id int, name varchar(20)) DECLARE @t table( Id int, name varchar(20)) INSERT @s values(1, 'a'), (2, 'b'), (2, 'c'), (3, 'd'), (3, 'e') INSERT @t values(1, 'f'), (1, 'g'), (2, 'h'), (3, 'i'), (3, 'j')
Je pense que vous avez juste besoin d'un opérateur Exists
pour le faire.
select * from @tt where exists (select 1 from @ss where t.id=s.id)
SQLFIDDLE DEMO
SELECT DISTINCT t.Id, t.name FROM SOURCE s INNER JOIN target t ON s.id=t.Id WHERE s.Id IN (SELECT Id FROM target)