Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Сравнение двух xml с помощью рекурсии. Что не так?

Сравнение двух xml с помощью рекурсии. Что не так?

Всем здравствуйте, есть вопрос.
Существует набор xml-данных состоящий из двух похожих частей Original и Changed. В Original исходные данные, в Changed измененные. Сопоставлял их с помощью рекурсивной ф-ции, чтобы получить на выходе xml, в котором данные из Original записаны, если в Changed точно такие же. У остальных данных в Changed по сравнению с Original отлично значение атрибута RowFieldValue. Поэтому из Original такие строки попадают с добавленным атрибутом Action = upd.
При выполнении первого варианта кода процесс уходит в бесконечный цикл.
При выполнении второго варианта кода(задано др.имя переменной счетчика в цикле), на выходе десяток одинаковых строк. Что там не так? Не удается доделать, хотя на мой взгляд ф-ция неплохая там.
Кому интересно, исполняемый код приложен в архиве к сообщению

К сообщению приложен файл (Cod.rar - 4Kb)
Ответ: Благодарю за содержательные ответы
Вопрос: Сравнение двух датасетов

Добрый день!

Имеется следующая задача - нужно сравнить два идентичных по структуре набора данных(2 среза одной таблицы). Нужно определить идентичны они или нет.
Количество строк может достигать 500 млн.
Ответ:
dbpatch
сравнение двумя проходами можно сделать очень просто - посчитать контрольную сумму по строкам, затем сложить в пределах всех строк.


Имхо много не выиграешь, все равно нужно читать обе таблицы. Наверное можно написать функцию, где сначало отсечь по косвенным признакам типа min() max() по индексу первичного ключа и каунт, и если все совпадает то продолжить с вариантом фетча по первичному ключу до фейла (может даже в параллели). А вообще покупайте шардинг и екзадату)
Вопрос: Сравнение двух идентичных таблиц

Помогите разобраться со сравнением. Есть две идентичные таблицы в разных базах. Как мне добавить в таблице второй базы не совпадающие данные из таблицы первой базы. Базы в одном сервере. Либо сравнить две таблицы и результат не совпадающих данных добавить в новой таблице. Хочу записать в новой таблице то что отсеял right join. Если написать select distinct N_DOC from
base1.dbo.Doc T1 right join base2.dbo.Doc T2 on T1.N_Doc=T2.N_Doc то получаю все те же данные которые есть 2 двух таблицах.
Ответ:
El_Ninio
И пробовал добавить в новой мною созданной таблице через insert Ругается на PK, Identity

insert into MyTable
select * from Base2.dbo.Doc T2, Base1.dbo.Doc T1 where T1.N_Doc!=T2.N_Doc
Всегда явно перечисляйте поля как в insert, так и в select. Потом будет проще, съэколномите время и силы.
Вопрос: Макрос для сравнения двух таблиц и запуска запроса

Здравствуйте господа!
У меня к Вам вопрос начинающего уровня, но к сожалению, вот уже третий день бьюсь над решением, остается одна надежда на Вас, опытных пользователей.
Суть в том, что у меня есть две таблицы. У обоих есть ключевые поля с уникальным номером, напротив этих номеров в этих двух таблицах наименование материала. Только вот в первой таблице список материала один, а в таблице номер два список другой. И задача сравнить две таблицы так чтобы запрос выдал только одинаковый материал который встречается в первой и во второй таблицах. Это я сделал создав связь по номеру материала. Теперь запрос у меня выглядит из четырех полей (ФИО таблицы №1, Телефон таблицы №1, ФИО №2, Телефон таблицы №2 ) то есть наглядно видно что этот телефон есть и там и там, но вот проблема: мне нужно чтобы после ввода данных в поле Телефон формы Клиент запускался макрос, который сначала проверит, есть ли одинаковые записи, а если есть, запустит запрос .
Подскажите пожалуйста и не пинайте сильно за глупый вопрос.
Очень жду ответа.
Спасибо!
Ответ: Fes62,
If DCount("[ID_Check]", "Заказано", "[КодЗаказа]=" & ' тут вставлять фильтр')>1 Then
...
End if

так попробуйте
вместо 'тут вставлять фильтр' нужно вставить Ваше выражение,
[ID_Check]-ключевое поле (либо поле в котром надо искать)
Вопрос: Сравнение двух планов запроса (9.7 и 9.1)

Сравниваю два плана запросов в БД 9.1 и 9.7, полученные в IBM DATA STUDIO:
Первый в 9.1:
Картинка с другого сайта.
Второй в 9.7:
Картинка с другого сайта.

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

Подскажите плиз, неужели разница из-за версий? Или что-то с package, используемым?
Ответ: Приношу свои извинения за введение в заблуждение, на нижнем скрине была Стоимость, а на верхнем - Мощность.
Но тогда еще один глупый вопрос, а где в IBM DATA STUDIO выставляется именно для базы в Наглядном объяснении, что будет выдаваться, потому что нужно мне одинаковое все-таки что было, а найти никак не получается, где Настройки именно для Наглядного объяснения.
Вопрос: Сравнение двух таблиц с добавлением записей

Уважаемые ГУРУ Access!
Есть такая задача.
Две таблицы с текстовыми полями.

tb1 поля tb1.1; tb1.2; tb1.3-пустое текстовое поле и
tb2 поля tb2.1; tb2.2; tb2.3- поле имеет некоторое значение.

Требуется сравнить таблицы по условию tb1.1=tb2.1 и tb1.2=tb2.2.
Если условие ИСТИНА - то tb1.3 присваивается значение tb2.3.
Если в tb1 нет записи соответствующей tb2, то запись из tb2 полностью по 3 полям добавляется в tb1.

Как такое можно сотворить?
Ответ: Спасибо огромное!
Вопрос: Сравнение двух таблиц

Здравсвтуйте, я с access и SQL на "Вы", очень прошу помогите решить задачку - сформировать SQL запрос для Access

Есть две таблицы Excel, имопортированые в Access.

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

Задача сравнить данные из стлбца "Артикул" со всеми строками второй таблици, и если значение ячейки в столбце "Артикул" первой таблицы встречается во второй таблице, тогда записать ВСЮ строку первой таблицы в третью таблицу.

Заранее благодарю, Дмитрий.
Ответ: Ну тут явно неправильная структура БД, в правильной структуре записи между таблицами не прыгают, а только коды.
Никаких ячеек в Акцессе нет, не было и никогда не будет, зарубите себе на носу!
Вопрос: Сравнение двух полей SDO_ORDINATES

Всем доброго времени суток.
Есть 2 таблички с полем-ключом и полем типа SDO_GEOMETRY. В табличках хранятся линии и их координаты, то есть задействовано поле SDO_ORDINATES.
Необходимо определить у какой линии координаты в первой и второй табличке отличаются (наборы линий однаковы и там и там).
Вопрос. Каким образом можно сравнить поле SDO_ORDINATES двух таблиц?

Читал про SDO_GEOM Package ( но ничего подходящего не нашел. Неужели каждый раз нужно сравнивать 2 массива и нет никаких готовых функций/операторов?
Заранее спасибо.
Ответ: IgorSm,
спасибо, я воспользовался оператором SDO_RELATE с маской 'mask=equal', из той же статьи.

У одной из табличек не оказалось Spatial Index индекса, создал так:
CREATE INDEX index_name ON table_name (geometry_field_name) 
   INDEXTYPE IS MDSYS.SPATIAL_INDEX  PARAMETERS ('TABLESPACE=TABLESPACE_NAME');


но перед этим пришлось заинсертить строку с инфой во вьюху USER_SDO_GEOM_METADATA, т.к. ругалось
автор
failed to read USER_SDO_GEOM_METADATA view

и создавало индекс в FAILED статусе.

Всем спасибо.
Вопрос: Сравнение двух таблиц и вывод данных из другой колонки

Добрый день. Возникла такая проблема:
Есть база в ней допустим 2 таблицы(tab1 и tab2).
В таблице tab1 есть такой параметр как "news_id". В ней хранятся, не сложно догадаться, цифры-айдишники присвоенные элементам.
Проблема в том, что не знаю как сравнить, так как в таблице tab2 есть параметр как "query" и в нем данные, по примеру "news_id=10".
Нужно сравнить как то эти два элемента, и если цифры похожи, то из таблицы tab2 вывести другой параметр "keyword", который совпадает с айдишниками этими.
могу вытащить как бы только с одной таблицы.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$result = mysql_query("SELECT news_id, title, short_description FROM  `fm_news_description` ORDER BY  `fm_news_description`.`news_id` ASC LIMIT 0 , 30");//Запрос
 while ($row=MYSQL_FETCH_ARRAY($result)){
 
    $news_id=$row['news_id'];
    $title=$row['title'];
    $short_description=$row['short_description'];
     echo '<item>
            <title>'.$title.'</title></br>
            <link></link></br>
            <description>'.$short_description.'</description></br>
         </item></br></br>';
 }
Добавлено через 49 минут
Вот для большего понимания скрины 2 таблиц:

Ответ:
Сообщение от Web1x
могу вытащить как бы только с одной таблицы.

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

SQL
1
2
3
SELECT tab1.news_id, tab1.title,  tab2.keyword
FROM  tab1 
LEFT JOIN tab2 ON tab2.query = CONCAT('news_id=',tab1.news_id)
Вопрос: Объединение временных интервалов, заданных таблицей

Хочу обсудить решение средствами SQL вот какой задачи. Дана таблица, содержащая набор интервалов дат. Например такая
SQL
1
2
3
4
CREATE TABLE (
id INT PRIMARY KEY IDENTITY (1, 1),
firstDate DATE,
lastDate DATE)
Требуется объединить все интервалы так, чтобы на выходе получилось минимально возможное кол-во не пересекающихся и не смежных интервалов, которые покрывают собой все интервалы из исходной таблицы.

Первый вариант решения такой:
1. Находим все попарно пересекающиеся интервалы
2. С помощью рекурсивного запроса для каждого интервала находим все интервалы, которые опосредованно пересекаются с ним (например первый со вторым, а второй с третьим)
3. Получившийся список интервалов будет содержать некоторое кол-во лишних. Их можно убрать, отсортировав список по начальной дате и для каждого ее значения выбрав самый длинный. Потом то же нужно сделать для конечных дат.

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

Второй вариант основан на разворачивании каждого интервала в последовательность дат:
1. Разворачиваем интервалы в таблицу дат и убираем из нее дублирующиеся даты
2. Далее проходим по отсортированной таблице дат фиксирую начала и окончания интервалов. Это можно сделать как курсором так и с помощью аналитических функций.

Тритий вариант, который я пока не пробовал реализовывать основан на использовании функции, объединяющей два интервала. Если её последовательно применить ко всем парам интервалов, то можно получить нужный результат. Увы, тут способа обойтись без курсора я не вижу.

Сталкивался ли кто на практике с подобной задачей? Как ее решали средствами SQL?
Ответ: Вроде бы разобрался! Спасибо!
Так в самом деле проще... Просто на проблему чуть с другой стороны нужно было взглянуть...