我还是SQL的新手,所以请耐心等待。
为了简化我的问题,我们说我有两个相同的人员表,其中包含ID,last_name,first_name,date_of_birth,street,city,state,zip等属性/字段。
我希望根据表1中的内容更新表2,但我希望保留自上次从表1刷新以来添加的表2中的数据。
归结为两条逻辑轨道,我不知道如何转换为SQL查询:
提前致谢
好的,所以2个表开始相同:
然后,用户将更新表2,而表1也将在同一时间内收到更新。
我们假设表1中更新了ID 1的名字和中间名,而表1中更新了ID 2的中间名。
Person table changes before update
所以现在,我正在尝试提出一个SP,它将根据表1更新表2并使用上述逻辑。
表2中的每一列都应该被表1中相应列中的数据覆盖,即使它覆盖了现有数据。所以' John'将再次成为雷切尔。我想要覆盖的例外是当表2中的数据被空值覆盖时。
因此,虽然John将被覆盖回Rachel,但作为middle_name的William应保留在表2中,因为表1的ID为空值(ID 1) 我会发布另一张所需输出的图片,但显然我还没有足够的声望发布超过2个链接。所以这是我想要的文本输出
更新后的Person_2
ID |姓氏| first_name的| middle_name
1 |阿迪|雷切尔|威廉
2 |咀|理查德|杰弗里
3 | ...
答案 0 :(得分:0)
好吧,我最终想通了。 这就是我所做的。
如果有人有更有效的方式做到这一点,我全都听见了。感谢。
SELECT Person_2.id
,CASE WHEN Person_2.ID=Person_1.id
AND Person_2.last_name IS NULL
THEN Person_1.last_name
WHEN Person_2.ID=Person_1.id
AND Person_2.last_name IS NOT NULL
AND Person_1.last_name IS NULL
THEN Person_2.last_name
WHEN Person_2.ID=Person_1.id
AND Person_2.last_name IS NOT NULL
AND Person_1.last_name IS NOT NULL
THEN Person_1.last_name
END AS last_name
,CASE WHEN Person_2.ID=Person_1.id
AND Person_2.first_name IS NULL
THEN Person_1.first_name
WHEN Person_2.ID=Person_1.id
AND Person_2.first_name IS NOT NULL
AND Person_1.first_name IS NULL
THEN Person_2.first_name
WHEN Person_2.ID=Person_1.id
AND Person_2.first_name IS NOT NULL
AND Person_1.first_name IS NOT NULL
THEN Person_1.first_name
END AS first_name
,CASE WHEN Person_2.ID=Person_1.id
AND Person_2.middle_name IS NULL
THEN Person_1.middle_name
WHEN Person_2.ID=Person_1.id
AND Person_2.middle_name IS NOT NULL
AND Person_1.middle_name IS NULL
THEN Person_2.middle_name
WHEN Person_2.ID=Person_1.id
AND Person_2.middle_name IS NOT NULL
AND Person_1.middle_name IS NOT NULL
THEN Person_1.middle_name
END AS middle_name
FROM Person_2
LEFT JOIN [Person_1] ON Person_2.id=Person_1.id