簡體   English   中英

SQL Server:比較兩個表並返回相似的行

[英]SQL Server : compare two tables and return similar rows

我想比較兩個表,源和目標,並獲得相似的行。

一一比較Id上的源和目標,並且:

  • 如果匹配並且它在 Target 上有兩個或多個 => 從 Target 中選擇所有匹配
    • 如果匹配並且在 Source => 上有兩個或更多
    • 如果之前沒有選擇,則首先匹配
      • 選擇匹配自目標
    • 否則(如果它之前選擇過)
      • 檢查下一個匹配

我認為需要一個遞歸表達式來一一檢查源和目標

來源

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')

我認為您只需要Exists運算符即可執行此操作。

select * from @t t
where exists (select 1 from @s s where t.id=s.id)

SQLFIDDLE 演示

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM