Есть две таблицы одинаковые по структуре (MSSQL) и по количеству записей. Записи должны соответствовать, но где то в поле со значением сумм есть различие. Как определить в какой конкретно строке есть различие с соответствующей строкой второй таблицы?
Для оракла это действительно правильное решение.
У микрософтовского сиквел сервера аналог есть?
Устроит SEL 1 WHERE NOT EXISTS (SEL 2)?
S>select * from table1 minus select * from table2
Здравствуйте, 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
Здравствуйте, 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
Здравствуйте, delphinchik, Вы писали:
D>Есть две таблицы одинаковые по структуре (MSSQL) и по количеству записей. Записи должны соответствовать, но где то в поле со значением сумм есть различие. Как определить в какой конкретно строке есть различие с соответствующей строкой второй таблицы?
SELECT a.*, b.sum FROM table1 a FULL JOIN table2 b ON a.id = b.id WHERE a.sum != b.sum
Здравствуйте, 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
Здравствуйте, 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 ...
Здравствуйте, DEathkNIghtS, Вы писали:
DEN>вариант DEN>select * from table1 DEN>minus DEN>select * from table2 DEN>работает не во всех СУБД, в моём MS SQL не работает.
Виноват, мне казалось, это стандартное слово. Как я сейчас посмотрел, в SQL92 это называется except — то есть, если я правильно понял стандарт, надо писать select * from table1 except select * from table2.
Здравствуйте, Softwarer, Вы писали:
S>Виноват, мне казалось, это стандартное слово. Как я сейчас посмотрел, в SQL92 это называется except — то есть, если я правильно понял стандарт, надо писать select * from table1 except select * from table2.
Я тоже профессионально работаю только с Oracle , а в MS SQL 2000 personal edition к сожалению ни except, ни intersect нет