I am trying to find the solution for the below query:
There are declared tables @Country
and @WHO
(World Health Organization).
Insert all possibles countries from table @Country
into table @WHO
.
The code for the tables is:
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')
The code that I started looks like this:
INSERT INTO @WHO (w.Country) SELECT DISTINCT c.Name FROM @Country c SELECT w.Country FROM @WHO w ORDER BY w.Country
The final result should be a table that contains:
China India Japan South Korea
I know this is probably an easy one but I cannot seem to find a solution.
What am I missing out from my code? 🙁
Advertisement
Answer
You can use 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)
A (possibly overkill) alternative is the MERGE
syntax:
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)