我试图找到以下查询的解决方案。
有声明的表 @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
我知道这可能是一个简单的问题,但我似乎找不到解决办法。
我的代码中漏掉了什么呢 :(
你可以使用 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)