我想比较两个表,source和target,并得到类似的行。
逐一比较Id
上的来源和目标:
我认为需要一个递归表达式来逐一检查源和目标
来源
x------x---------x
| Id | Name |
x------x---------x
| 1 | a |
| 2 | b |
| 2 | c |
| 3 | d |
| 3 | e |
| 4 | x |
x------x---------x
目标
x------x---------x
| Id | Name |
x------x---------x
| 1 | f |
| 1 | g |
| 2 | h |
| 3 | i |
| 3 | j |
| 5 | y |
x------x---------x
结果
x------x---------x
| Id | Name |
x------x---------x
| 1 | f |
| 1 | g |
| 2 | h |
| 3 | i |
| 3 | j |
x------x---------x
测试数据
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')
答案 0 :(得分:2)
我认为您只需要Exists
运算符即可。
select * from @t t
where exists (select 1 from @s s where t.id=s.id)
<强> SQLFIDDLE DEMO 强>
答案 1 :(得分:-1)
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)