为了简单起见,假设我有两个表:一个称为People
,另一个称为Contacting
People
表:
ID primary key
NAME
WEBSITE
EMAIL
Contacting
表:
ID (foreign key to People ID)
WAY_OF_CONTACTING
REFERENCE
逻辑如下:对于People
表中的每个人,Contacting
的表上可能有几个记录。显然,People
和Contacting
之间的关系是一对多的。
WAY_OF_CONTACTING
只能有 2 个值:"电子邮件"和"网站",REFERENCE
列包含电子邮件或网站名称。
Contacting
表的主键是由ID
和Way_Of_Contacting
组成的复合主键(这意味着,对于每个 ID,它们最多只能有一个电子邮件和一个网站)
人们表上的记录每晚都会被删除,并在白天填充。
"人员"表中可能会发生 4 种情况:
- 网站和电子邮件为空
- 网站为空,但不是电子邮件
- 电子邮件为空,但不是网站
- 网站和电子邮件都不为空
我的问题如下:
对于People
表中的每条记录
当
ID
存在于Contacting
中但没有record
Way_of_Contacting='Website'
或 ID 在Contacting
中不存在时,insert into Contacting
记录当
ID
存在于Contacting
中但没有Way_of_Contacting='Website'
record
或 ID 在Contacting
中不存在时,insert into Contacting
记录
换句话说:
- 如果
Contacting
表中存在该People ID
,请检查记录在字段Way_of_Contacting
上是否具有值"电子邮件"。 - 如果此类记录不存在,并且
People table
中的Email
字段不为空,则insert a record
。 - 如果
ID
不存在,并且">人员"Email
字段不为空,则insert a record
。
Website
也是如此
如何做到这一点?
我尝试使用merge
和if not exists
但我似乎找不到正确的答案
您可以尝试使用视图而不是如下所示的表格吗?优点是视图始终基于人员表进行更新。
CREATE VIEW dbo.Contacting
AS
Select
ID
,'Website' as Way_of_Contacting
,WEBSITE as Reference
From People
Where WEBSITE is not null
Union all
Select
ID
,'Email' as Way_of_Contacting
,Email as Reference
From People
Where Email is not null