У меня есть две следующие таблицы:
Table1
----------
ID Name
1 A
2 B
3 C
Table2
----------
ID Name
1 Z
Мне нужно вставить данные из Table1
в Table2
. Я могу использовать следующий синтаксис:
INSERT INTO Table2(Id, Name) SELECT Id, Name FROM Table1
Однако в моем случае могут существовать повторяющиеся идентификаторы Table2
(в моем случае это просто " 1
"), и я не хочу копировать это снова, так как это вызовет ошибку.
Я могу написать примерно так:
IF NOT EXISTS(SELECT 1 FROM Table2 WHERE Id=1)
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1
ELSE
INSERT INTO Table2 (Id, name) SELECT Id, name FROM Table1 WHERE Table1.Id<>1
Есть ли лучший способ сделать это без использования IF - ELSE
? Я хочу избежать двух INSERT INTO-SELECT
утверждений, основанных на каком-то условии.
sql
sql-server
tsql
sql-insert
Ашиш Гупта
источник
источник
NOT EXISTS
особенно полезен с составным первичным ключом,NOT IN
тогда не будет работатьВ MySQL вы можете сделать это:
Есть ли у SQL Server что-нибудь подобное?
источник
У меня была аналогичная проблема, ключевое слово DISTINCT работает волшебно:
источник
insert into
таблице.Недавно я столкнулся с той же проблемой ...
Вот что сработало для меня в MS SQL server 2017 ...
Первичный ключ должен быть установлен на ID в таблице 2 ...
Столбцы и свойства столбцов должны быть одинаковыми, конечно, между обоими таблицы. Это сработает при первом запуске приведенного ниже сценария. Повторяющийся идентификатор в таблице 1 не будет вставлен ...
Если вы запустите его второй раз, вы получите
Это код:
источник
Использование
ignore Duplicates
уникального индекса, как было предложено IanC, было моим решением аналогичной проблемы, создание индекса с помощью OptionWITH IGNORE_DUP_KEY
Ссылка: index_option
источник
Из SQL Server вы можете установить индекс уникального ключа в таблице для (столбцы, которые должны быть уникальными)
источник
Немного не по теме, но если вы хотите перенести данные в новую таблицу, а возможные дубликаты находятся в исходной таблице , а возможно дублированный столбец не является идентификатором,
GROUP BY
подойдет:источник
Достаточно простого
DELETE
перед темINSERT
:Переключение
Table1
вTable2
зависимости от того , таблицыId
иname
сопряжения вы хотите сохранить.источник