Как получить значения, которых нет в таблице? - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть значения в значении excel (10 000): «8000217», «8000508», «8000608», «8000712», «8014705» и т. Д., И я хотел бы знать, существует ли он в моемтаблица (если она не существует, я отправляю их), и если она существует, не может быть в состоянии вставить ту же таблицу

Я пытался:

SELECT Esa 
FROM
    (SELECT 'Test 1' UNION
     SELECT 'Test 2' UNION
     SELECT 'Test 3') [TABLE]
WHERE Esa NOT IN (SELECT Esa FROM[TABLE];

но я не могу, запросне работает.

Я бы хотел, чтобы запрос возвращал мне те, которых нет в таблице SQL

Ответы [ 3 ]

1 голос
/ 21 сентября 2019

Используйте приведенный ниже код с исключением, это поможет вставить логику

SELECT Esa into [TABLE3] from (
    select 'Test 1' as esa union
    select 'Test 2' union
    select 'Test 3' )  [TABLE]
except 
SELECT Esa from (
    select 'Test 1' esa 
    ) [TABLE1]

select * from [TABLE3]

drop table [TABLE3]
0 голосов
/ 21 сентября 2019

Это то, что вы ищете?Есть множество способов сделать это.(не проверено)

declare @ValueToTest int = 8000217

if exists (select 1 from YourTable where ESA = @ValueToTest)
   begin
      print 'It is in the table'
   end
else
   begin
      print 'It is not in the table'
   end

Или, если вы получаете значения в таблицу, вы можете оставить соединение, используя предложение where null, чтобы получить значения, которых нет в таблице.

select testvalues.ESA
from testvalues
left outer join existingTable on testvalues.ESA = existingTable.ESA
where existingTable.ESA is null
0 голосов
/ 21 сентября 2019

Поскольку кажется, что между вашими данными и целевой таблицей кардинальность 1-1, yhis выглядит как хороший пример использования антипаттерна LEFT JOIN: попробуйте объединить два набора данных и вернуть те, которые не совпадают:

SELECT Esa 
FROM (
    SELECT 'Test 1' AS Esa UNION ALL SELECT 'Test 2' UNION ALL SELECT 'Test 3'
) [DATA]
LEFT JOIN [TABLE] ON [TABLE].Esa = [DATA].Esa
WHERE [TABLE].Esa IS NULL

Другим типичным вариантом является использование коррелированного подзапроса с условием NOT EXISTS:

SELECT Esa 
FROM (
    SELECT 'Test 1' AS Esa 
    UNION ALL SELECT 'Test 2'
    UNION ALL SELECT 'Test 3'
) [DATA]
WHERE NOT EXISTS (
    SELECT 1 FROM [TABLE] WHERE [TABLE].Esa = [DATA].Esa
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...