SQL - 违反UNIQUE KEY约束条件

问题描述 投票:0回答:1

我试图找到以下查询的解决方案。

有声明的表 @Country@WHO (世界卫生组织)。

从表中插入所有可能的国家。@Country 入表 @WHO.

表格的代码是。

DECLARE @Country TABLE 
(
    Id INT PRIMARY KEY IDENTITY(1,1),
    Name NVARCHAR(100),
    Capital NVARCHAR(100)
)

INSERT INTO @Country (Name, Capital) 
VALUES ('China', 'Beijing'), ('Japan', 'Tokyo'), 
       ('India', 'New Delhi'), ('South Korea', 'Seoul')

DECLARE @WHO TABLE
(
    Id INT PRIMARY KEY IDENTITY(1,1),
    Country NVARCHAR(100) UNIQUE
)

INSERT INTO @WHO (Country) 
VALUES ('Japan'), ('South Korea')

我开始写的代码是这样的

INSERT INTO @WHO (w.Country)
    SELECT DISTINCT c.Name
    FROM @Country c

SELECT w.Country 
FROM @WHO w 
ORDER BY w.Country

最后的结果应该是一个包含..:

China
India
Japan
South Korea

我知道这可能是一个简单的问题,但我似乎找不到解决办法。

我的代码中漏掉了什么呢 :(

sql sql-server unique-constraint
1个回答
1
投票

你可以使用 not exists:

INSERT INTO @WHO (w.Country)
SELECT DISTINCT c.Name
FROM @Country c
WHERE NOT EXISTS (SELECT 1 FROM @WHO w WHERE w.Country = c.Name)

一个(可能是矫枉过正)的备选方案是: MERGE 句法。

MERGE INTO @WHO w
USING (SELECT DISTINCT Name FROM @Country) c
ON (c.Name = w.Country)
WHEN NOT MATCHED BY TARGET
THEN INSERT (Country) VALUES(c.Country)
© www.soinside.com 2019 - 2024. All rights reserved.