Mishki-tomsk.ru

Мода и стиль
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

SQL как проверить, что две таблицы содержат точно такие же данные

SQL как проверить, что две таблицы содержат точно такие же данные?

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

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

18 ответов

  • Как проверить, содержат ли две базы данных SQL Server одинаковые данные?

Учитывая две базы данных MS SQL, которые, как известно, имеют идентичные схемы, как я могу сказать, содержат ли они идентичные копии данных? Я использую MS SQL Server 2008 Express и кодирую в C# и v2.0 фреймворка .Net, используя ADO.NET APIs. Оба экземпляра базы данных находятся на одном сервере.

Мне нужно определить, содержат ли два набора точно такие же элементы. Порядок не имеет значения. Например, эти два массива следует считать равными: IEnumerable<int> data = new []<3, 5, 6, 9>; IEnumerable<int> otherData = new [] <6, 5, 9, 3>Один набор не может содержать никаких.

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

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

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

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

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

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

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

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

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

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

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

  • Т-SQL найти точно такие же значения в связанной таблице

Предположим, что у меня есть 3 таблицы в моей базе данных Sql Serer 2008: CREATE TABLE [dbo].[Properties]( [PropertyId] [int] NOT NULL, [PropertyName] [nvarchar](50) NOT NULL ) CREATE TABLE [dbo].[Entities]( [EntityId] [int] NOT NULL, [EntityName] [nvarchar](50) NOT NULL ) CREATE TABLE.

У меня есть таблица, которая поддерживает набор данных Gold Standard, которому должна соответствовать другая таблица, если она была обработана правильно. Обе эти таблицы содержат почти 1 000 000 записей данных. Например. У меня есть таблица (table1), которая имеет PrimaryKey1, ColumnA, ColumnB.

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

Пример 1-флаг состояния:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

А и в должны быть одного типа. Вы можете использовать информационную схему для создания SELECT. Не забывайте, что COALESCE также включает в себя результаты NULL. Вы также можете использовать полное внешнее соединение и COALESCE (T1.PK,0)=COALESCE (T2.PK,0).

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

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

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

‘X’-это любое значение.

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

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

Читайте так же:
Ортопедический воротник как определить размер

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

Похожие вопросы:

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

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

В принципе, у нас есть одна таблица ( original table ), и она копируется в другую таблицу ( backup table ); таким образом, две таблицы имеют точно такую же схему. В начале обе таблицы ( original.

Учитывая две базы данных MS SQL, которые, как известно, имеют идентичные схемы, как я могу сказать, содержат ли они идентичные копии данных? Я использую MS SQL Server 2008 Express и кодирую в C# и.

Мне нужно определить, содержат ли два набора точно такие же элементы. Порядок не имеет значения. Например, эти два массива следует считать равными: IEnumerable<int> data = new []<3, 5, 6, 9>;.

Предположим, что у меня есть 3 таблицы в моей базе данных Sql Serer 2008: CREATE TABLE [dbo].[Properties]( [PropertyId] [int] NOT NULL, [PropertyName] [nvarchar](50) NOT NULL ) CREATE TABLE.

У меня есть таблица, которая поддерживает набор данных Gold Standard, которому должна соответствовать другая таблица, если она была обработана правильно. Обе эти таблицы содержат почти 1 000 000.

Я хочу проверить, содержат ли два Traversable s одни и те же элементы без учета их порядка. Итак, я попробовал это сделать сам и написал следующий простой пример: implicit val l = 3 implicit def.

используя Sql server 2008, я могу вернуть два результата таблицы, как показано ниже ОБЕ ТАБЛИЦЫ СОДЕРЖАТ ОДНИ И ТЕ ЖЕ ДАННЫЕ И СХОДНЫЕ ДАННЫЕ Я пытаюсь объединить эти две таблицы и исключить.

Я хочу проверить, содержат ли две фразы одно и то же слово с PHP я использую strpos и strstr , но это не работает для меня, потому что я точно не знаю положение слова. example : Thismyfirstword.

Сшить таблицы мапинфо в одну

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

Инструкция

Устанавливаем себе надстройку ЁXCEL . Читаем справку.

Приступаем к решению. Переходим во вкладку ЁXCEL главного меню, нажимаем кнопку «Таблицы», в выпавшем списке выбираем команду «Объединить таблицы»:

В открывшемся диалоговом окне выделяем листы с таблицами, которые необходимо объединить и нажимаем «ОК»:

Программа сформирует запрос — объединит таблицы и выведет информационное сообщение:

Переходим на итоговый лист (тот где хотим вывести общую таблицу), устанавливаем курсор в ячейку «A1«. Переходим в главном меню во вкладку «Данные» в разделе «Получение внешних данных» нажимаем кнопку «Существующие подключения»:

Читайте так же:
Какой кистью нельзя рисовать какой иглой не сошьешь

В открывшемся диалоговом окне выбираем «Подключения в этой книге» — «Запрос из Excel Files» и нажимаем «Открыть»:

В открывшемся диалоговом окне устанавливаем переключатели в положения «Таблица» и «Имеющийся лист», нажимаем «ОК»:

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

Теперь все таблицы связаны. Добавьте новые строчки в любую из объединенных таблиц. Перейдите во вкладку «Данные» и нажмите кнопку «Обновить все»:

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

Чтобы обновление итоговой таблицы происходило автоматически вставьте в модуль каждого листа (кроме Итогового) следующий код (Как вставлять макросы?):

Видео-пример

Важно:

  • Количество столбцов во всех таблицах должно быть одинаково;
  • Кроме таблиц на листах не должно быть никакой информации;
  • Если вы переместили файл в другую папку или отправили файл коллеге по электронной почте — необходимо заново связать таблицы (в запросе прописывается абсолютный путь к файлу).

Чтобы запрос работал не зависимо от того в какой папке лежит файл вставьте в модуль «ЭтаКнига» следующий код:

Данный макрос при открытии книги будет определять текущий путь к файлу и менять путь к файлу в запросе.

Файлы для скачивания:

ФайлОписаниеРазмер файла:Скачивания
Пример21 Кб2448

Чтобы оценить всю прелесть — выньте файл из архива и при загрузке файла включите макросы.

Возможные ошибки при использовании этого метода:

  • В таблицах одинаковое количество столбцов, но при попытке использовать запрос получаем сообщение: «В таблицах или запросах, выбранных в запросе на объединение, не совпадает число столбцов.» Причина: в одном или нескольких листах с таблицами есть пустые столбцы (в них раньше были данные) и MS Excel считает их столбцами таблиц. Решение: Выделить и удалить все пустые столбцы на листах с таблицами.
  • Все столбцы удалили, но ошибка осталась. Причина: файл сохранен на сетевом диске или открыт из почтовой программы. Решение: сохраните файл у себя на локальном компьютере, выполните запрос, вставьте в него макрос меняющий путь в запросе и выложите обратно в сеть (если нужно).
  • В полученном запросе в некоторых ячейках пропадают данные. Причина: в ваших таблицах встречаются столбцы, которые одновременно содержатся и числовые и текстовые значения. MS Excel считает, что эти столбцы должны содержать только числа и не выводит текст. Решение:преобразуйте все числовые значения в этих столбцах во всех таблицах в текстовые. Обновите запрос — текстовые данные появятся.
Добавить комментарий
Комментарии

Есть файл с 22 вкладками. на них одинаковые по структуре таблицы. 2-3 любых таблицы объединяются легко. большее кол-во уже нет. Внутренняя ошибка драйвер odbc excel внутренняя ошибка программировани я объектов.

куда рыть? что править

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

Сшить таблицы мапинфо в одну

Команда Импорт группы MIF файлов в TAB

Команды работы с таблицами > Команда Импорт группы MIF файлов в TAB

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

Команда Импорт группы MIF файлов позволяет выбрать в качестве источника каталог, в котором находятся несколько MID / MIF файлов и запустить импортирование всех этих таблиц, за одну операцию.

Команда Импорт группы MIF файлов в TAB вызывается с помощью команды Таблицы > Импорт группы MIF файлов в TAB.

Команда Импорт группы MIF файлов в TAB доступна в том случае, если пользователем открыто окно карты.

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

089_GeoMaster

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

С помощью кнопки Каталог пользователь может указать: сам каталог или некоторые таблицы, с которыми будет работать данная команда. В том случае, если для обработки необходимо использовать некоторые выбранные таблицы, то необходимо включить флажок Обрабатывать только выделенные файлы, в противном случае обрабатываться будут все таблицы в указанном каталоге. В том случае, если в выбранном каталоге есть вложенные, и их также требуется включить в обработку командой, то необходимо установить флажок Включать вложенные папки.

Команда анализирует все указанные файлы и создает из них таблицы MapInfo. Созданные таблицы закрываются, а не остаются открытыми, как в MapInfo. В результате выполнения команды, в указанном каталоге будут находиться исходные файлы обменного формата и уже импортированные таблицы MapInfo.

Как объединить 48 разделенных слоев США в 1 слой, используя MapInfo?

Это слои переписного блока. Человек на веб-сайте разделил их на штаты, чтобы их можно было скачать проще. Я загрузил каждый отдельный слой в MapInfo.

Теперь мне нужно объединить файлы в один слой США.

Все они имеют одну и ту же структуру и поля таблицы. Я просто загрузил MapBasic, но я не уверен, как его использовать.
Я попытался сложить слои, чтобы выбрать их все, а затем просто сохранить выбранные. Работает только на верхнем слое.

Пожалуйста помоги! Спасибо всем за вашу помощь заранее!

If you have (or are willing to begin using) Quantum GIS, you can use the «Vector->Merge Shapefiles» tool (under the vector menu).

If you don’t mind doing a bit of grunt work and if you are only doing it once the you could just open all the tables and do Table -> Append Rows to Table. This will give you a dialog asking which table you want to append to what, so just choose one of the states to append everything to and go through appending each one, one at a time, to this ‘master’ table. To make this a bit quicker and easier I would suggest following these steps;

1) Откройте все свои отдельные слои (вы можете открыть их в «Нет просмотра», чтобы все было немного более аккуратно) и убедитесь, что у вас нет ничего другого.

2) Go to Table -> Append Rows to Table

3) (Этот шаг позволит вам сэкономить массу времени). Удостоверьтесь, что вы оставили «Столбец» как любой по умолчанию. Это означает, что каждый раз, когда вы открываете этот диалог, вам не придется выбирать другую «Таблицу», вам просто нужно будет изменить «Таблицу добавления»,

4) Change the Append table to the first one in the list that isn’t the same one as in the ‘To Table’!

5) Повторите с шага 2, изменив таблицу «Добавить таблицу» на следующую.

После того, как вы все это сделали, все, что бы вы ни говорили в «Таблице», будет содержать все, и вы можете сохранить копию этого как «Все» или что-то подобное.

Я уверен, что есть лучший способ, особенно если вы изучите немного MapBasic, но если вам нужно быстрое и грязное решение, это должно сработать. Это то, что я делаю, когда у меня есть пара таблиц для объединения, имеющих ту же структуру. Понятно, что я никогда не делал 48 таблиц, так что это может быть слишком сложная работа.

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

EDIT: I did find the tool, it wasn’t one I made, it was one I downloaded called ‘COMB_TAB.mbx’, but I can’t find it anywhere on the internets and I can’t upload it since I am at work and everythings blocked! There is another tool out there, but I haven’t tried it, might be worth a go. — http://mapinfotools.com/index.php?option=com_sobi2&sobi2Task=sobi2Details&catid=8&sobi2Id=34&Itemid=53

Существует также это обсуждение в Google Groups , в котором говорится о «appender» .mbx ‘, который может быть виден как часть вашей установки MapInfo, но опять же, я не мог найти его

голоса
Рейтинг статьи
Ссылка на основную публикацию
Adblock
detector