以下是我所理解的内容:
我有两个数据库表:People和Contacts。 People是原始表,而Contacts是新表,用于覆盖People表中的数据(在实际情况下,这些是不同的数据库)。
在最初的加载时,所有人员记录都将被复制到联系人表中,但在初始加载之后,可以向People或Contacts表中添加新人员,也可以将联系人设置为已删除。
我希望返回所有人员,但希望Contacts表优先,例如:
示例:
People表
PersonGuid | PersonId | FirstName | LastName
-----------|----------|-------------|-----
1 xxxx1 | 1 | John | Smith
2 xxxx2 | 2 | Jane | Doe
3 xxxx3 | 3 | John | Doe
4 xxxx4 | 4 | Alice | James
5 xxxx5 | 5 | Claire | Wheeler
联系人表 (Jane Doe 被设置为已删除,John Doe 由于在初始导入后添加,所以不存在,Emma Green 已被添加。对于未被操作过的条目,已删除为NULL)
ID | LinkedId | FirstName | LastName | Deleted
-----------|----------|-------------|----------|----------
1 xxxx1 | 1 | John | Smith | NULL
2 xxxx2 | 2 | Jane | Doe | 1
3 xxxx3 | NULL | Emma | Green | 0
4 xxxx4 | 4 | Alice | James | 0
5 xxxx5 | 5 | Claire | Wheeler | NULL
我想要返回的是:(所有记录,但将Jane Doe设置为已删除,因为她在联系人表中)
ID | LinkedId | FirstName | LastName | Deleted
-----------|----------|-------------|----------|----------
1 xxxx1 | 1 | John | Smith | NULL
2 xxxx2 | 2 | Jane | Doe | 1
3 xxxx3 | 3 | John | Doe | 0
4 xxxx4 | NULL | Emma | Green | 0
5 xxxx5 | 4 | Alice | James | 0
6 xxxx6 | 5 | Claire | Wheeler | NULL
但我所得到的是: (简·多两次)
ID | LinkedId | FirstName | LastName | Deleted
-----------|----------|-------------|----------|----------
1 xxxx1 | 1 | John | Smith | NULL
2 xxxx2 | 2 | Jane | Doe | 1
3 xxxx2 | 2 | Jane | Doe | 0
4 xxxx3 | 3 | John | Doe | 0
5 xxxx4 | NULL | Emma | Green | 0
6 xxxx5 | 4 | Alice | James | 0
7 xxxx6 | 5 | Claire | Wheeler | NULL
我想合并这两个表格,但是不知道如何过滤筛选,使联系人数据覆盖人员数据,同时还要获取两个表格的所有数据?
Select PersonGuid as Id,
Personid,
Firstname,
LastName,
cast(0 as bit) as deleted
From DB1.People
Union
Select
Id,
LinkedId as PersonId,
FirstName,
LastName,
Deleted
from DB2.Contacts
我尝试过搜索,但我不确定该用什么关键词,所以我的术语可能有误。
编辑-实际查询远非我的示例简单,并且每个查询的来源都是约6个表的连接。 我试图制作一个简单的示例以使其清晰,但不确定这是否使解决方案不同?