【问题标题】:SQL Server: Insert record into a table if it doesn't existSQL Server:如果记录不存在,则将记录插入表中
【发布时间】:2021-09-03 08:53:53
【问题描述】:

为了简单起见,假设我有两张桌子。一个叫People,另一个叫Contacting

People Table
ID primary key
NAME
WEBSITE
EMAIL

Contacting Table
ID (foreign key to People ID)
WAY_OF_CONTACTING
REFERENCE

逻辑如下:对于People 表中的每个人,Contacting 表中可能有几条记录。显然,People和Contacting之间的relationship1:many

WAY_OF_CONTACTING 只能有 2 个值:"Email""Website"REFERENCE 字段包含电子邮件或网站名称。 Contacting table 的主键是 composiste primary key,由 ID 和 Way_Of_Contacting 组成。 (这意味着,对于每个 ID,他们最多只能拥有 一个 电子邮件和 一个 网站) 人们每天晚上都会删除人们表上的记录,并全天填充。

People 表中可能会发生 4 件事:

  1. 网站和电子邮件为空
  2. 网站为空,但没有电子邮件
  3. 电子邮件为空,但不是电子邮件
  4. 网站和电子邮件都不是空的

我的问题如下:

对于 People 表中的每条记录,谁的 Website 字段不为空 ID matchesWay_Of_Contacting='Website'

对于People 表中的每条记录,谁的Email 字段不为空 我想检查if there exists Contacting 表中的一条记录,其中ID matchesWay_Of_Contacting='Email'

在这两种情况下,如果记录不存在,则创建一个记录。 这怎么可能实现? 我尝试过使用mergeif not exists,但似乎找不到正确的答案

【问题讨论】:

    标签: sql sql-server sql-server-2012 sql-insert exists


    【解决方案1】:

    对于 People 表中网站字段不为空的每条记录,我想检查 Contacting 表中是否存在 ID 匹配且 Way_Of_Contacting='Website' 的记录

    。 . .如果记录不存在,则创建记录。

    您可以将not existsinsert 一起使用。 “网站”的例子是:

    insert into contacting (id, way_of_contacting, reference)
        select p.id, 'Website', p.website
        from people p
        where not exists (select 1
                          from contacting c
                          where c.id = p.id and
                                c.way_of_contacting = 'Website' and
                                c.reference = p.website
                         );
    

    类似的逻辑用于“电子邮件”。

    【讨论】:

    • 这看起来很不错!!这在以下情况下是否有效?当 ID 存在于 Contacting 中但没有网站记录时。当 ID 在 Contacting 中不存在时
    • @PedroEmilioVélez。 . .不,这不是你在这里问的问题。如果您有不同的问题,请作为问题提出。这个问题现在有了答案。
    猜你喜欢
    • 2014-04-04
    • 2011-07-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    相关资源
    最近更新 更多