SQL Server 2014 插入不在其中的位置

标签 sql sql-server sql-insert sql-server-2014

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

我希望创建第三个表,其中包含 Salutation , fname , mname , lname , uid , added根据其他两个表中的信息,我将删除第一个表并重新创建第二个表,删除这些列。

这就是我所拥有的:

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吗?声明使其有效?

  1. 它不喜欢Fname, LnameWHERE 的右侧词
  2. 我应该先从第二个表插入,然后再从第一个表插入吗?

最佳答案

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

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 Server 2014 插入不在其中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29835581/

相关文章:

mysql - SQL插入并选择多列?

sql - 如何找到两个日期之间的持续时间

sql - 如何在 SQL where 子句中执行条件语句

c# - 使用一个 SQL 命令从 sql 中获取全部或部分结果

sql-server - 如何将 MongoDB 中的数据与 SQL Server 连接?

mysql - hibernate 不插入行

php - 当我使用带有常量值的 bindParam 时,为什么出现 Cannot pass parameter 2 by reference 错误?

sql - 在没有 LIKE 的情况下检查 Oracle 中字符串中的子字符串

mysql - sql合并两个查询结果

sql-server - 在没有实体类的情况下动态构建 LINQ to SQL 查询