Сравнение таблиц
От: delphinchik Россия  
Дата: 18.10.04 08:42
Оценка:
Есть две таблицы одинаковые по структуре (MSSQL) и по количеству записей. Записи должны соответствовать, но где то в поле со значением сумм есть различие. Как определить в какой конкретно строке есть различие с соответствующей строкой второй таблицы?
Re: Сравнение таблиц
От: Softwarer http://softwarer.ru
Дата: 18.10.04 08:51
Оценка:
Здравствуйте, delphinchik, Вы писали:

select * from table1 minus select * from table2
Re[2]: Сравнение таблиц
От: delphinchik Россия  
Дата: 18.10.04 09:05
Оценка:
Что то мне не совсем понятно чем это мне может помочь?
Просматривать каждую строку? Так у меня их 10 000.
Re[2]: Сравнение таблиц
От: Альт Россия http://cryptocode.ru
Дата: 18.10.04 09:06
Оценка:
Здравствуйте, Softwarer, Вы писали:

Для оракла это действительно правильное решение.
У микрософтовского сиквел сервера аналог есть?
Устроит SEL 1 WHERE NOT EXISTS (SEL 2)?

S>select * from table1 minus select * from table2
... << RSDN@Home 1.1.3 stable >>
: 4000654
Re: Сравнение таблиц
От: ZrenBy Россия  
Дата: 18.10.04 09:07
Оценка:
Здравствуйте, delphinchik, Вы писали:

D>Как определить ...


declare @a table(aid int, av int)
declare @b table(bid int, bv int)

insert into @a select 0,0 union select 1, 1 union select 2,2 union select 3,3
insert into @b select 1,1 union select 2,22 union select 3,3 union select 4,4

select aid, bid, av, bv
from      @a a
full join @b b on bid = aid
where av != bv or av is null or bv is null
Re[3]: Сравнение таблиц
От: vvaizh http://izh-test.sourceforge.net/
Дата: 18.10.04 09:10
Оценка:
Здравствуйте, delphinchik, Вы писали:

D>Что то мне не совсем понятно чем это мне может помочь?

D>Просматривать каждую строку? Так у меня их 10 000.

по идее такой запрос

select * from table1 minus select * from table2


должен оставить только отличающиеся строки..
хотя имхо быстрее (и переносимее, гля такой запрос
даже местный highlight не взял, не говоря уже о
современных и модных СУБД)
будет

select * 
from table1 left join table2 on table1.<где то сумма>=table2.<где то сумма>
where table2.<где то сумма> is null


то же самое можно ище переписать через подзапрос
(http://www.rsdn.ru/Forum/Message.aspx?mid=854338
Автор: Cruelty
Дата: 15.10.04
)

но мой вариант по любому лучше
http://izh-test.sourceforge.net/russian/introduction.html
Re: Сравнение таблиц
От: algol Россия about:blank
Дата: 18.10.04 09:11
Оценка:
Здравствуйте, delphinchik, Вы писали:

D>Есть две таблицы одинаковые по структуре (MSSQL) и по количеству записей. Записи должны соответствовать, но где то в поле со значением сумм есть различие. Как определить в какой конкретно строке есть различие с соответствующей строкой второй таблицы?


SELECT a.*, b.sum FROM table1 a FULL JOIN table2 b ON a.id = b.id WHERE a.sum != b.sum
Re[3]: Сравнение таблиц
От: Merle Австрия http://rsdn.ru
Дата: 18.10.04 09:12
Оценка:
Здравствуйте, delphinchik, Вы писали:

D>Что то мне не совсем понятно чем это мне может помочь?

Это, действительно ничем, так как запрос будет работать только в Оракле.

D>Просматривать каждую строку?

Есть другие варианты? Каким интеллектом должен облдать сервер чтобы обнаружить различие двух таблиц не просмотрев каждую строку?

D>Так у меня их 10 000.

Это мало...

Возможные варианты запроса:

SELECT * from table t1 where not exists(select 1 from table where <поле которое отличается> = t1.<поле которое отличается>)


SELECT t1.* from table t1 left join table t2 
    on t1.<поле которое отличается>=t2.<поле которое отличается>
WHERE t2.<поле которое отличается> IS NULL
... [ RSDN@Home 1.1.4 revision 142 ]
Мы уже победили, просто это еще не так заметно...
Re: Сравнение таблиц
От: DEathkNIghtS  
Дата: 18.10.04 09:12
Оценка: 1 (1)
Здравствуйте, delphinchik, Вы писали:

D>Есть две таблицы одинаковые по структуре (MSSQL) и по количеству записей. Записи должны соответствовать, но где то в поле со значением сумм есть различие. Как определить в какой конкретно строке есть различие с соответствующей строкой второй таблицы?


вариант
select * from table1
minus
select * from table2
работает не во всех СУБД, в моём MS SQL не работает.

select * from table1 inner join table2 on table1.id = table2.id
where table1.col1 != table2.col1 or
table1.col2 != table2.col2 ...

будет работать в MS SQL
Re[2]: Сравнение таблиц
От: delphinchik Россия  
Дата: 18.10.04 09:33
Оценка:
Всем огромное спасибо, с Вашей помощью проблема решилась.
Re[2]: Сравнение таблиц
От: Softwarer http://softwarer.ru
Дата: 18.10.04 10:06
Оценка: 5 (1)
Здравствуйте, DEathkNIghtS, Вы писали:

DEN>вариант

DEN>select * from table1
DEN>minus
DEN>select * from table2
DEN>работает не во всех СУБД, в моём MS SQL не работает.

Виноват, мне казалось, это стандартное слово. Как я сейчас посмотрел, в SQL92 это называется except — то есть, если я правильно понял стандарт, надо писать select * from table1 except select * from table2.
Re[3]: Сравнение таблиц
От: DEathkNIghtS  
Дата: 18.10.04 11:23
Оценка:
Здравствуйте, Softwarer, Вы писали:

S>Виноват, мне казалось, это стандартное слово. Как я сейчас посмотрел, в SQL92 это называется except — то есть, если я правильно понял стандарт, надо писать select * from table1 except select * from table2.


Я тоже профессионально работаю только с Oracle , а в MS SQL 2000 personal edition к сожалению ни except, ни intersect нет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.