Способы сравнения таблиц с помощью sql

SQL сравнивает данные из двух таблиц

У меня есть 2 таблицы TableA и TableB , которые имеют одинаковый формат столбца, например, обе таблицы TableA и TableB имеют столбцы

где A и B являются первичными ключами.

Как написать SQL, чтобы проверить, что если TableA и TableB , имеющие одинаковые первичные ключи, содержат одинаковое значение в каждом столбце.

Это означает, что эти две таблицы имеют точно такие же данные.

ОТВЕТЫ

Ответ 1

Вы должны иметь возможность «MINUS» или «EXCEPT» в зависимости от вкуса SQL, используемого вашей СУБД.

Если запрос не возвращает строк, то данные будут точно такими же.

Ответ 2

Использование реляционных операторов:

Измените EXCEPT на MINUS для Oracle.

Слегка придирчивая точка: вышеупомянутое полагается на приоритет оператора, который, согласно стандарту SQL, зависит от реализации, поэтому YMMV. Он работает для SQL Server, для которого приоритет:

  • Выражения в круглых скобках
  • INTERSECT
  • EXCEPT и UNION оцениваются слева направо.

Ответ 3

dietbuddha имеет приятный ответ. В тех случаях, когда у вас нет MINUS или EXCEPT, один из вариантов состоит в том, чтобы сделать объединение между таблицами, группировать по всем столбцам и убедиться, что есть два из всего:

Ответ 4

Вернет все идентификаторы, которые являются одинаковыми в обеих таблицах. Чтобы получить различия, EXISTS НЕ СУЩЕСТВУЕТ.

Ответ 5

Взяв script из onedaywhen, я изменил его, чтобы также показать, из какой таблицы поступает каждая запись.

Ответ 6

просто для завершения, proc, сохраненный с использованием метода except для сравнения 2 таблиц и получения результата в той же таблице с 3-мя ошибками, ADD, DEL, GAP таблица должна иметь тот же PK, вы объявляете 2 таблицы и поля для сравнения 1 или обеих таблиц

Просто используйте это ps_TableGap ‘tbl1’, ‘Tbl2’, ‘fld1, fld2, fld3’, ‘fld4’fld5’fld6’ (необязательно)

Ответ 7

Усиление ответа на диетубаддха.

Ответ 8

Вы можете найти различия между двумя таблицами, используя комбинацию вставки всех и полного внешнего соединения в Oracle. В sql вы можете извлечь различия с помощью полного внешнего соединения, но кажется, что вставка all/first не существует в sql! Следовательно, вместо этого вы должны использовать следующий запрос:

Хотя использование «ИЛИ» в предложении where не рекомендуется и обычно приводит к снижению производительности, вы все равно можете использовать приведенный выше запрос, если ваши таблицы не являются массивными. Если есть какой-либо результат для вышеупомянутого запроса, это точно различия двух таблиц, основанные на сравнении полей 1,2,3,4. Для повышения производительности запроса вы также можете отфильтровать его по дате (см. Прокомментированную часть).

Ответ 9

Результат равен null, но источники разные!

Ответ 10

У меня была такая же проблема в SQL Server, и я написал этот T-SQL script для автоматизации процесса (на самом деле это версия с увлажненной версией, я написал все данные для отдельной таблицы для удобства отчетности).

Обновите «MyTable» и «MyOtherTable» на имена таблиц, которые вы хотите сравнить.

Ответ 11

Я написал это, чтобы сравнить результаты довольно неприятного представления, которое я портировал с Oracle на SQL Server. Он создает пару временных таблиц, #DataVariances и #SchemaVariances, с различиями в (вы уже догадались) данными в таблицах и схемой самих таблиц.

Он требует, чтобы обе таблицы имели первичный ключ, но вы могли бы поместить его в tempdb с помощью столбца идентификации, если исходные таблицы не имеют его.

Ответ 12

Большинство ответов, кажется, игнорируют проблему, поднятую Камилом. (Вот где таблицы содержат одинаковые строки, но разные таблицы повторяются в каждой таблице.) К сожалению, я не могу использовать его решение, потому что я в Oracle. Лучшее, что я смог придумать, это:

Читайте также:  Какого способа уменьшения осадок фундамента нет

Ответ 13

Мы можем сравнить данные из двух таблиц таблиц DB2, используя следующий простой запрос:

Шаг 1: — Выберите, какие все столбцы нам нужно сравнить из таблицы (T1) схемы (S)

Шаг 2: — Используйте ключевое слово «Минус» для сравнения 2 таблиц.

Шаг 3: — Выберите, какие все столбцы нам нужно сравнить из таблицы (T2) схемы (S)

КОНЕЦ результат: — ВЫБЕРИТЕ T1.col1, T1.col3, T1.col5 из S.T1 МИНУС ВЫБРАТЬ T2.col1, T2.col3, T2.col5 из S.T1;

Если запрос не возвращает строк, данные точно такие же.

Ответ 14

Сравнить T1 (PK, A, B) и T2 (PK, A, B).

Сначала сравните наборы первичных ключей, чтобы найти значения пропущенных ключей с обеих сторон:

Затем перечислите все несоответствия значений:

A и B должны быть одного типа. Вы можете использовать ИНФОРМАЦИОННУЮ СХЕМУ для генерации SELECT. Не забывайте КОАЛЕСС.

Например, для столбцов типа varchar:

Ответ 15

В MySQL, где «минус» не поддерживается и учитывает производительность, это быстрый

Ответ 16

Альтернативный расширенный запрос, основанный на ответе dietbuddha и IanMc. Запрос включает описание, чтобы помочь показать, где строки существуют и отсутствуют. (NB: для SQL Server)

Ответ 17

«Х» — это любое значение.

Переключите таблицы, чтобы увидеть различные расхождения.

Обязательно объедините ключевые поля в ваших таблицах.

Или просто используйте оператор MINUS с двумя операторами выбора, однако, MINUS может работать только в Oracle.

Источник

sql-запрос для возврата различий между двумя таблицами

Я пытаюсь сравнить две таблицы в SQL Server, чтобы проверить некоторые данные. Я хочу вернуть все строки из обеих таблиц, где данные либо одно, либо другое. По сути, я хочу показать все несоответствия. Мне нужно проверить три части данных при этом, FirstName, LastName и Product.

Я довольно новичок в SQL, и кажется, что многие решения, которые я нахожу, усложняют вещи. Мне не нужно беспокоиться о нулях.

Я начал пытаться что-то вроде этого:—4—>

у меня возникли проблемы с этим дальше, хотя.

на основе ответа @treaschf я пытался использовать вариант следующего запроса:

но я продолжаю получать 0 результатов, когда я знаю, что в td есть по крайней мере 1 строка, которая не находится в d.

ладно, кажется, я понял. По крайней мере, в мои несколько минут тестирования это кажется работать достаточно хорошо.

это в основном собирается сказать мне, что в моих тестовых данных, которые не в моих реальных данных. Что совершенно нормально для того, что мне нужно делать.

10 ответов

если у вас есть таблицы A и B , оба с colum C , вот записи, которые присутствуют в таблице A а не B :

чтобы получить все различия с одним запросом, необходимо использовать полное соединение, например:

что вам нужно знать в этом случае, так это то, что когда запись можно найти в A , но не B , чем столбцы, которые приходят из B будет NULL, и аналогично для тех, которые присутствует в B и не в A , колонок A будет null.

Я знаю, что это может быть не популярный ответ, но я согласен с @Randy Minder на использование стороннего инструмента, когда требуется более сложное сравнение.

этот конкретный случай здесь прост, и для этого случая такие инструменты не нужны, но это может легко усложниться, если вы введете больше столбцов, базы данных на двух серверах, более сложные критерии сравнения и т. д.

чтобы получить все различия между двумя таблицами, вы можете использовать, как и я, этот SQL-запрос:

Если вы хотите получить, какие значения столбцов отличаются, Вы можете использовать модель Entity-Attribute-Value:

гораздо проще читать.

это сделает трюк, похожий на Тиагорешение, возвращает таблицу» источник», а также.

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

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

Читайте также:  Как определить ежемесячную сумму амортизации способом уменьшаемого остатка

вы можете легко написать процедуру хранения Для сравнения пакета таблиц.

простой вариант ответа @erikkallen, который показывает, в какой таблице присутствует строка:

Если вы получаете ошибку

все запросы, объединенные с помощью оператора UNION, INTERSECT или EXCEPT, должны иметь равное количество выражений в целевых списках.

тогда это может помочь, чтобы добавить

существует проблема производительности, связанная с левым соединением, а также полным соединением с большими данными.

Источник

Сравнить две таблицы в MySQL

При переносе данных нам часто приходится сравнивать две таблицы, чтобы определить запись в одной таблице, у которой нет соответствующей записи в другой таблице.

Например, у нас есть новая база данных, схема которой отличается от устаревшей базы данных. Наша задача – перенести все данные из устаревшей базы данных в новую и убедиться, что данные были перенесены правильно.

Чтобы проверить данные, нам нужно сравнить две таблицы, одну в новой базе данных и одну в устаревшей базе данных, и идентифицировать несопоставленные записи.

Предположим, у нас есть две таблицы: my_table и you_table. Следующие шаги сравнивают две таблицы и идентифицируют несопоставленные записи:

Во-первых, используйте оператор UNION для объединения строк в обеих таблицах; включать только столбцы, которые нужно сравнить. Возвращенный набор результатов используется для сравнения.

Во-вторых, сгруппируйте записи на основе первичного ключа и столбцов, которые необходимо сравнить. Если значения в столбцах, которые необходимо сравнить, идентичны, COUNT(*) возвращается 2, в противном случае COUNT(*) возвращается 1.

Смотрите следующий запрос:

Если значения в столбцах, участвующих в сравнении, идентичны, строка не возвращается.

Пример сравнения двух таблиц в MySQL

Давайте посмотрим на пример, который имитирует шаги выше.

Сначала создайте 2 таблицы с похожей структурой:

Во-вторых, вставьте некоторые данные в таблицы my_table и you_table:

В-третьих, сравните значения id и столбца title обеих таблиц:

Возвращенных строк не будет, потому что нет несоответствующих записей.

В-четвертых, вставьте новую строку в таблицу you_table:

В-пятых, выполните запрос, чтобы снова сравнить значения столбца заголовка в обеих таблицах. Новая строка, которая является несопоставленной строкой, должна вернуться.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Запрос SQL на сравнение двух таблиц с условием

Первая таблица: Customers (id, name, city, salesman_id)

Вторая таблица: Salesman (id, name, city, commission)

Нужен запрос на получение всех имен Customers, у которых Salesman.commission от 0.10 до 0.20

Если не прав — помогите написать правильный SQL-запрос

3 ответа 3

Ну или, если =any не поддерживается, то заменить на in

И, да, найти Грабера/Грубера «Понимание SQL». Может и устарел, но как учебник для начинающего вполне подойдет.

Я бы написал так:

Да влоб хотя бы.

или через коррелированный подзапрос

Всё ещё ищете ответ? Посмотрите другие вопросы с метками sql или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.11.17.40781

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

SQL сравнить данные из двух таблиц

У меня 2 таблицы TableA и TableB которые имеют тот же формат столбца, например , обе таблицы TableA и TableB имеют столбцы

где A и B — первичные ключи.

Как написать SQL, чтобы проверить, что if TableA и TableB that имеют одинаковые первичные ключи, содержат одно и то же значение во всех столбцах.

Это означает, что в этих двух таблицах точно такие же данные.

Вы должны иметь возможность «МИНУС» или «ИСКЛЮЧИТЬ» в зависимости от разновидности SQL, используемого вашей СУБД.

Читайте также:  Способ добычи угля бассейна печорский

Если запрос не возвращает строк, данные точно такие же.

Использование операторов отношения:

Изменение EXCEPT к MINUS для Oracle.

Немного придирчивый момент: вышесказанное зависит от приоритета операторов, который, согласно стандарту SQL, зависит от реализации, поэтому YMMV. Он работает для SQL Server, для которого приоритет:

  1. Выражения в скобках
  2. INTERSECT
  3. EXCEPT и UNION оценивается слева направо.

У diebuddha есть хороший ответ. В случаях, когда у вас нет МИНУС или ИСКЛЮЧЕНИЕ, один из вариантов — объединить все таблицы между собой, сгруппировать по всем столбцам и убедиться, что всего два:

Вернет все ОДИНАКОВЫЕ ИДЕНТИФИКАЦИИ в обеих таблицах. Чтобы получить различия, измените EXISTS на NOT EXISTS.

Взяв сценарий из oneedaywhen, я изменил его, чтобы также показать, из какой таблицы происходит каждая запись.

просто для завершения процесс, сохраненный с использованием метода except для сравнения 2 таблиц и получения результата в той же таблице с 3 состояниями ошибок, таблица ADD, DEL, GAP должна иметь одинаковый PK, вы объявляете 2 таблицы и поля для сравнения 1 или обеих таблиц

Просто используйте как этот ps_TableGap ‘tbl1’, ‘Tbl2’, ‘fld1, fld2, fld3’, ‘fld4’fld5’fld6’ (необязательно)

Умный подход к использованию NATURAL FULL JOIN для обнаружения одинаковых / разных строк между двумя таблицами.

Пример 1 — флаг статуса:

Пример 2 — фильтрация строк

Дополнение к ответу диетбудды .

Вы можете найти различия двух таблиц, используя комбинацию вставки всего и полного внешнего соединения в Oracle. В sql вы можете извлечь различия с помощью полного внешнего соединения, но кажется, что insert all / first не существует в sql! Следовательно, вместо этого вы должны использовать следующий запрос:

Хотя использование OR в предложении where не рекомендуется и обычно приводит к снижению производительности, вы все равно можете использовать вышеуказанный запрос, если ваши таблицы не являются массивными. Если и есть результат по вышеуказанному запросу, то это как раз различия двух таблиц на основе сравнения полей 1,2,3,4. Для повышения производительности запроса вы также можете фильтровать его по дате (проверьте прокомментированную часть)

Результат нулевой, но источники разные!

У меня была такая же проблема в SQL Server, и я написал этот сценарий T-SQL для автоматизации процесса (на самом деле это упрощенная версия, я записал все различия в единую таблицу для облегчения отчетности).

Обновите MyTable и MyOtherTable именами таблиц, которые вы хотите сравнить.

Я написал это, чтобы сравнить результаты довольно неприятного представления, которое я перенес с Oracle на SQL Server. Он создает пару временных таблиц, #DataVariances и #SchemaVariances, с различиями (как вы уже догадались) в данных в таблицах и в схеме самих таблиц.

Для этого требуется, чтобы обе таблицы имели первичный ключ, но вы можете перетащить его в tempdb со столбцом идентификаторов, если в исходных таблицах его нет.

Большинство ответов, кажется, игнорируют проблему, поднятую Камилем. (Именно здесь таблицы содержат идентичные строки, но разные повторяются в каждой таблице.) К сожалению, я не могу использовать его решение, потому что я работаю в Oracle. Лучшее, что мне удалось придумать, это:

Чтобы сравнить T1 (PK, A, B) и T2 (PK, A, B).

Сначала сравните наборы первичных ключей, чтобы найти недостающие значения ключей с обеих сторон:

Затем перечислите все несоответствия значений:

A и B должны быть одного типа. Вы можете использовать ИНФОРМАЦИОННУЮ СХЕМУ для генерации SELECT. Не забудьте, что COALESCE также включает результаты IS NULL. Вы также можете использовать FULL OUTER JOIN и COALESCE (T1.PK, 0) = COALESCE (T2.PK, 0).

Например, для столбцов типа varchar:

Мы можем сравнить данные из двух таблиц таблиц DB2, используя следующий простой запрос:

Шаг 1: — Выберите все столбцы, которые нам нужно сравнить, из таблицы (T1) схемы (S)

Шаг 2: — Используйте ключевое слово «Минус» для сравнения двух таблиц.

Шаг 3: — Выберите все столбцы, которые нам нужно сравнить, из таблицы (T2) схемы (S)

Если запрос не возвращает строк, данные точно такие же.

Источник

Оцените статью
Разные способы