【发布时间】:2021-09-03 09:41:19
【问题描述】:
为了简单起见,假设我有两张表:一张称为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,它们最多只能有 一个电子邮件和一个网站)
人们表上的记录每晚都会被删除,并且全天都会被填充。
People 表中可能会发生 4 件事:
- 网站和电子邮件为空
- 网站为空,但没有电子邮件
- 电子邮件为空,但不是网站
- 网站和电子邮件都不是空的
我的问题如下:
对于People 表中的每条记录
-
insert into Contacting当ID存在 在Contacting但不 有一个record和Way_of_Contacting='Website'或当ID 不存在于Contacting -
insert into Contacting当ID存在 在Contacting但不 有一个record和Way_of_Contacting='Website'或当ID 不存在在Contacting
换句话说:
- 如果
People ID存在 在Contacting表中,请检查记录是否在字段Way_of_Contacting上具有值“Email”。 - 如果该记录不存在,且
People table中的Email字段不为空,则insert a record。 - 如果
ID不存在 并且 People 中的Email字段不为空,则insert a record。
Website 也是如此
如何做到这一点?
我尝试过使用merge 和if not exists,但似乎找不到正确答案
【问题讨论】:
-
“我尝试过使用合并,如果不存在,但我似乎找不到正确的答案” 这些尝试是什么?为什么他们不工作?
-
我认为你需要清理这个问题,因为它看起来相当复杂,不清楚为什么或你想要什么,我开始想要帮助但不清楚目标是什么。首先,当这是联系表使用的外键时,为什么要删除 People 行。
-
在联系表中为什么不将 ID 重命名为 people_Id 并添加一个唯一的主键。以后会省痛的,
标签: sql-server merge sql-server-2012 exists not-exists