【问题标题】:How to copy row in one table to another only when that row doesn't exist in target table仅当目标表中不存在该行时,如何将一个表中的行复制到另一个表
【发布时间】:2020-11-07 07:48:22
【问题描述】:

我正在尝试编写一条语句,为联系人表中不在 Employee 表中的每个条目向雇员表中添加行。

我还需要使用 = 3 的新 ManagerId 更新员工表中的新条目。

这是我目前所拥有的,我认为我的部分语法有误。

INSERT INTO Employees
SELECT * FROM Contacts
Left Join Employees on Employees.Firstname = Contacts.FirstName 
and Employees.LastName = Contacts.LastName
WHERE Employees.FirstName and Employees.LastName = NULL
--set all new added employess's manager ID to 3

【问题讨论】:

    标签: sql sql-server tsql left-join sql-insert


    【解决方案1】:

    下面insert使用not exists判断是否插入新行。

    INSERT INTO dbo.Employees (**List columns here**, ManagerId)
    SELECT (**List columns here**, 3)
    FROM dbo.Contacts C
    WHERE NOT EXISTS (
        SELECT 1
        FROM dbo.Employees E
        WHERE E.FirstName = C.FirstName 
        AND E.LastName = C.LastName 
    )
    

    注意事项:

    1. 始终列出 insertselect 的所有列 - 这样您可以省去很多未来的痛苦。
    2. 对对象进行模式质量的最佳实践。
    3. 最佳做法是为表设置别名,因为这样可以提高 SQL 的可读性。

    【讨论】:

      【解决方案2】:
      1. 要将新行从另一个表插入到一个表中,您 必须提及列名,因为两个表都有不同的 命名约定和不同的列数。

      2. 要映射列,您必须定义源列和目标列, 通过他们的名字和在表格中的位置。

      INSERT INTO Employees (Firstname, LastName, ManagerId, 'AND ALL OTHER COLUMNS WHICH YOU WANT TO COPY')
      SELECT Firstname, LastName, 3, 'AND ALL OTHER COLUMNS WHICH YOU WANT TO COPY' FROM Contacts contacts
      WHERE NOT EXISTS (
       SELECT 1
       FROM Employees e
       WHERE e.FirstName = contacts.FirstName 
       AND e.LastName = contacts.LastName 
      )
      

      试试这个,并在此处添加您的特定列'AND ALL OTHER COLUMNS WHICH YOU WANT TO COPY'

      【讨论】:

        猜你喜欢
        • 2020-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-24
        相关资源
        最近更新 更多