有2张 table 。第一个具有fname(名字),lname(姓氏),第二个具有许多列,包括:salutation(先生,博士等),fname(名字),mname(中间名),lname(姓氏),唯一标识符和一个日期。

我希望根据其他2个表中的信息创建一个包含Salutationfnamemnamelnameuidadded的第三个表,然后删除第一个表并重新创建第二个表,以删除这些列。

这就是我所拥有的:

CREATE TABLE MyTable
(
    Id  int  IDENTITY (1, 1) PRIMARY KEY,
    Salutation  varchar(20) NULL DEFAULT (NULL),
    Fname  varchar(30) NOT NULL,
    Mname  varchar(30) NULL DEFAULT (NULL),
    Lname  varchar(30) NOT NULL,
    Uid  uniqueidentifier NULL DEFAULT (NULL),
    Added  Date NOT NULL DEFAULT (getdate())
);

INSERT INTO MyTable (Fname, LName)
   SELECT Fname, Lname
   FROM TABLE1

这是我感到困惑的地方:
INSERT INTO MyTable (Salutation, Fname, Mname, LName, Uid, Added)
   SELECT
      Salutation, Fname, Mname, LName, Uid, Added
   FROM
      Table2
   WHERE
      Fname, Lname NOT IN (SELECT Fname, Lname FROM Table1)

有人可以更正最后一个INSERT语句以使其起作用吗?
  • 它不喜欢Fname, Lname
  • 右侧的WHERE
  • 我应该先从第二个表中插入,然后再从第一个表中插入吗?
  • 最佳答案

    您可以将not exists与相关子查询一起使用:

    insert into MyTable (Salutation, Fname, Mname, LName, Uid, Added)
    select Salutation, Fname, Mname, LName, Uid, Added from Table2 t
    where not exists (select 1 from Table1 where Fname = t.Fname and Lname = t.Lname )
    

    更新

    根据OP在以下评论中提供的新条件,我可以确定应在其中包括记录的两种可能情况:
  • 匹配fnamelname
  • 匹配Salutationlname

  • 符合以上条件的查询如下:
    insert into MyTable (Salutation, Fname, Mname, LName, Uid, Added)
    select Salutation, Fname, Mname, LName, Uid, Added from Table2 t
    where not exists (
       select 1
       from Table1
       where Lname = t.Lname and
           ( Fname = t.Fname or Salutation = t.Salutation )
    )
    

    关于sql - SQL Server 2014插入不在其中的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29835581/

    10-11 02:07