插入不同的值 SQL Server

grt*_*ibo 2 sql-server insert distinct-values

我正在尝试从视图中将唯一值插入到表中。我有一张如下表:“fromView”在护照中没有唯一约束

id  | passport | name | surname | address 
1      44543     John    Smith     xxxxx
2      10001     Mike    Thomps    avasfa
3      10001     Mike    Thomps    avasfa
4      10001     Mike    Thomps    avasfa
5      14221     Robert  Martinez  lkjij3
Run Code Online (Sandbox Code Playgroud)

我的“toTable”具有相同的数据结构,但在护照列中有一个唯一的约束。

我的插入查询是这样的:

INSERT into toTable (id, passport, name, surname, address) 
SELECT (id, passport, name, surname, address) 
FROM fromView a 
WHERE passport IS NOT NULL AND NOT EXISTS (SELECT * 
                                           FROM toTable b
                                           WHERE b.passport = a.passport)
Run Code Online (Sandbox Code Playgroud)

但这给了我以下错误:

无法在具有唯一索引“toTable_Passport_Unique”的对象“toTable”中插入重复的键行。

所以,我不知道如何将唯一值插入到我的表中。提前致谢

Raj*_*ore 5

您可以通过运行以下查询获取具有多个条目的所有护照的列表:

Select Passport, Count (*) NumEntries
From  fromTable
Group by Passport
Having Count (*) > 1
Run Code Online (Sandbox Code Playgroud)

然后您必须决定如何处理这些重复的行。运行以下查询以查看这些重复项的完整行:

Select *
From  fromTable
Where Passport In
(
    Select Passport, Count (*) NumEntries
    From  fromTable
    Group by Passport
    Having Count (*) > 1
)
Order by Passport
Run Code Online (Sandbox Code Playgroud)

假设您决定使用为每本护照插入的最新行(意味着 Id 将是最高的),此查询将为您提供所需的数据。

Select T1.*
From  fromTable T1
Where Id In
(
    Select Max (Id) Id
    From  fromTable
    Group by Passport
)
Run Code Online (Sandbox Code Playgroud)

您可以插入使用

INSERT into toTable (id, passport, name, surname, address) 
Select T1.*
From  fromTable T1
Where Id In
(
    Select Max (Id) Id
    From  fromTable
    Group by Passport
)
Run Code Online (Sandbox Code Playgroud)