Страницы

Поиск по вопросам

воскресенье, 1 марта 2020 г.

Сравнение двух таблиц, вывод уникальных значений по одному столбцу

#sql


Имеется 2 одинаковых таблицы. Допустим Лист1 и Лист2, в каждой таблице имеется один
столбец Поле1. 

Мне нужно сверить значения Лист2 с Лист1 и вывести только уникальные. (Хочу убрать
дубли, которые имеются в Лист1). Другими словами. Мне нужно вывести только те значения
Лист2, которых нет в Лист1.
    


Ответы

Ответ 1



Есть два варианта. Первый вам привёл @IgorSl: SELECT DISTINCT [Поле1] FROM [Лист1] WHERE 1 = 1 AND [Поле1] NOT IN (SELECT [Поле1] FROM [Лист2]) Второй через JOIN: SELECT DISTINCT [Лист1].[Поле1] FROM [Лист1] LEFT JOIN [Лист2] ON [Лист1].[Поле1] = [Лист2].[Поле1] WHERE 1 = 1 AND [Лист2].[Поле1] IS NULL В принципе, они эквиваленты. В разовом запросе на небольших данных да при отсутствии индекса по полю разницы особо не будет (и там и там в плане выполнения запроса будет table scan).

Ответ 2



В ANSI SQL Standard существует оператор EXCEPT предназначенный для получения разности множеств: SELECT DISTINCT [Поле1] FROM [Лист1] EXCEPT SELECT [Поле1] FROM [Лист2] Насколько мне известно оператор EXCEPT реализован в SQL Server, PostgreSQL, SQLite, IBM DB2, Oracle (как MINUS), H2, HSQLDB, Derby: В Oracle он называется MINUS: SELECT DISTINCT [Поле1] FROM [Лист1] MINUS SELECT [Поле1] FROM [Лист2] Таблица поддержки SQL функций/методов/операторов для различных реляционных СУБД (RDBMS) PS в MySQL, MariaDB, Firebird - оператор EXCEPT/MINUS не реализован.

Ответ 3



select distinct [Поле1] from [Лист1] where [Поле1] not in (select [Поле1] from [Лист2])

Комментариев нет:

Отправить комментарий