Sql server 比较两个表并将结果添加到第二个表中

Sql server 比较两个表并将结果添加到第二个表中,sql-server,Sql Server,我一直在比较两个几乎相同的表,并在第二个表中更新/添加结果。这是我正在使用的两张桌子。Person1(ID、姓名、PHNumber)和Person2(ID、姓名、PHNumber、IsActive) 注意:person1的行数总是比person2的行数多/少/相同。person1是参考表,我们需要将person1 int中不存在/不存在的行添加/删除到person2。我正在使用microsoft SQL server management studio 案例1:如果比较结果有更多行(假设pers

我一直在比较两个几乎相同的表,并在第二个表中更新/添加结果。这是我正在使用的两张桌子。Person1(ID、姓名、PHNumber)和Person2(ID、姓名、PHNumber、IsActive)

注意:person1的行数总是比person2的行数多/少/相同。person1是参考表,我们需要将person1 int中不存在/不存在的行添加/删除到person2。我正在使用microsoft SQL server management studio

案例1:如果比较结果有更多行(假设person1有10行,person2有8行),那么我们需要将这些(2行)添加到person2中,并为这些行保留IsActive-1

案例2:如果比较的结果不同(假设person1有10行,而person2有20行),那么我们需要找到那些delta 10行,并为那些10行保留IsActive-0

希望问题清楚,并期待您有价值的解决方案。非常感谢。
这里Person1不包含newdata2,而是包含newdata,newdata1,它们是
比较后会有新的值,因此我们给出IsActive-0和IsActive-1
分别地
人1:
身份证号码
1密苏里州123
2堪萨斯州111
3.第234页
4加利福尼亚456
5印度888
6斯里兰卡780
7达拉斯890
8德克萨斯1111
9马里奥1112
10修女7878
11庞蒂亚克8765
12新数据1234
13新数据12345
人员2:
ID名称PHNumber是活动的
密苏里州1231
2堪萨斯州111 1
3 stlouise 234 1
4加利福尼亚456 1
5印度888 1
6斯里兰卡780 1
7达拉斯8901
8德克萨斯11111
9马里奥1112 1
10修女7878 1
11庞蒂亚克8765 1
12新数据2 987 1
结果:人员2:
ID名称PHNumber是活动的
密苏里州1231
2堪萨斯州111 1
3 stlouise 234 1
4加利福尼亚456 1
5印度888 1
6斯里兰卡780 1
7达拉斯8901
8德克萨斯11111
9马里奥1112 1
10修女7878 1
11庞蒂亚克8765 1
12新数据2 987 0
13新数据1234 1

14新数据12345 1
如果您仍在查找或回答,可以这样尝试

;WITH cte
AS (SELECT
    COALESCE(p1.id, p2.id) AS id,
    COALESCE(p1.name, p2.name) AS name,
    COALESCE(p1.phnumber, p2.phnumber) AS phnumber,
    CASE WHEN p1.name IS NULL THEN 0 ELSE 1 END AS IsActive
FROM Person1 p1
FULL JOIN person2 p2
    ON p1.name = p2.name
    AND p1.phnumber = p2.phnumber)
SELECT
    ROW_NUMBER() OVER (ORDER BY id, phnumber) AS id,
    name, phnumber, IsActive
FROM cte

哪些匹配列(列中的值相同)使一行与另一行“相等”?这非常简单。请尝试使用合并/更新语句并返回给我们。MySQL还是SQL Server?你们两个都标记了。。。你的意思是什么?@pmbAustin对不起,我是说sql server,你能帮我解决这个问题吗。谢谢。谢谢你,Kannan Kndasamy,你的解决方案给了我正确的结果,但我需要在所有情况下进行测试。谢谢你为我花了宝贵的时间。。