ВСТАВИТЬ только отсутствующие записи из временной таблицы

avatar
jmontegrosso
8 августа 2021 в 23:45
75
3
0

Как мне сделать INSERT таким образом, но вставлять только те записи, которых нет в таблице Cities?

CREATE TABLE #tCities (IDCity VARCHAR(10), NameCity VARCHAR(60))

INSERT INTO #tCities (IDCity, NameCity)
VALUES ('1','New York')

INSERT INTO #tCities (IDCity, NameCity)
VALUES ('2','Boston')
 

INSERT INTO Cities (ID_City, Name_City)
SELECT IDCity, NameCity
FROM #tCities A
LEFT JOIN Cities B ON A.IDCity = B.ID_City
WHERE A.IDCity IS NULL

DROP TABLE #tCities
Источник
jmontegrosso
9 августа 2021 в 00:00
0

Да, я понимаю, сейчас я делаю

jmontegrosso
9 августа 2021 в 00:05
0

Большое спасибо, я начинаю с SQL и не мог найти способ

Ответы (3)

avatar
Dale K
8 августа 2021 в 23:47
1

Вместо объединения вы можете использовать NOT EXISTS например,

INSERT INTO Cities (ID_City, Name_City)
    SELECT IDCity, NameCity
    FROM #tCities A
    WHERE NOT EXISTS (SELECT 1 from Cities C WHERE C.ID_City = A.IDCity);
avatar
Farhad Rad
9 августа 2021 в 00:11
0

Просто замените WHERE A.IDCity IS NULL на WHERE B.ID_City IS NULL и все готово

avatar
Gordon Linoff
8 августа 2021 в 23:46
1

Вы близко. Если вы используете LEFT JOIN, сначала нужно #tCities. И вы хотите, чтобы WHERE проверял Cities на отсутствие совпадений:

INSERT INTO Cities (ID_City, Name_City)
    SELECT t.IDCity,t. NameCity
    FROM #tCities t LEFT JOIN
         Cities c
         ON c.IDCity = t.ID_City
    WHERE c.IDCity IS NULL;