有 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
吗?声明使其有效?
- 它不喜欢
Fname, Lname
在WHERE
的右侧词 - 我应该先从第二个表插入,然后再从第一个表插入吗?
最佳答案
您可以将 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在下面的评论中提供的新条件,我可以确定应包含记录的两种可能情况:
fname
和lname
匹配;Salutation
和lname
匹配。
符合上述条件的查询如下:
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/