powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка различающихся строк
6 сообщений из 6, страница 1 из 1
Выборка различающихся строк
    #32001910
Brand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ли способ для быстрой выборки строк первой таблицы, которых нет во второй?

select distinct table1.field1
from table1, table2
where table1.field1 <> table2.field1

что-то уж очень долго работает
...
Рейтинг: 0 / 0
Выборка различающихся строк
    #32001919
AnKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, братец, быстродействие еще зависит и от корректного индексирования . Вот вариант запроса, возвращающего аналогичный набор. А работает ли он быстрее - тестируй сам.
На сколько я понимаю, должен быть быстрее.

select t1.*
from table1 t1 LEFT JOIN table2 t2 ON t1.field1=t2.field2
where t2.field2 is null

ЗЫ. Не полохо бы иметь индексы по полям t1.field1 и t2.field2.
...
Рейтинг: 0 / 0
Выборка различающихся строк
    #32001921
AnKa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон, индексы надо не иметь, а создать.
...
Рейтинг: 0 / 0
Выборка различающихся строк
    #32001922
VadimB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно и так
select distinct table1.field1
from table1
where not exists (select * from table2
where table1.field1 = table2.field1)

Более быстрый способ:
Для каждой строки жранить поля с контрольной суммой или на худой конец с длинной поля.
Если проиндексировать поля с контрольной суммой то будет быстрее (индекс меньше)

table1 (field1 varchar,crc1 int)
table2 (field2 varchar,crc2 int)

select distinct table1.field1
from table1
where not exists (select * from table2
where table1.crc = table2.crc2
and table1.field1 = table2.field1) -- прорверка нужна, у разных строк могут совпасть crc
...
Рейтинг: 0 / 0
Выборка различающихся строк
    #32001923
VadimB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно и так
select distinct table1.field1
from table1
where not exists (select * from table2
where table1.field1 = table2.field2)
Более быстрый способ:
Для каждой строки жранить поля с контрольной суммой или на худой конец с длинной поля.
Если проиндексировать поля с контрольной суммой то будет быстрее (индекс меньше)

table1 (field1 varchar,crc1 int)
table2 (field2 varchar,crc2 int)

select distinct table1.field1
from table1
where not exists (select * from table2
where table1.crc1 = table2.crc2
and table1.field1 = table2.field2) -- прорверка нужна, у разных строк могут совпасть crc
...
Рейтинг: 0 / 0
Выборка различающихся строк
    #32001925
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно еще так:

select * from table1 t1
where not exists(select * from table2 t2 where t1.field1=t2.field2)

Но ни в коем случае не так:
select distinct table1.field1
from table1, table2
where table1.field1 <> table2.field1
Здесь будут перебраны все возножные сочетания из двух таблиц, кроме тех где эти поля одинаковы.
Т.е. если мы имеет table1 со значениями 2,3,4 и table2 со значениями 4,5, то в результате получим сочетания:
2 4
2 5
3 4
3 5
4 4 ***
4 5
При условии field1 <> field2 не войдет в окончательную выборку только предпоследняя строка. И в итоге мы получим все поля, которые есть в таблице table1. Скорее всего из-за такой большой выборки запрос и работает так медленно - индексы нужны, но в данном случае они бы не помогли: запрос составлен неправильно, происходит полный перебор всех записей.
Так что быстродействие еще зависит и от корректного написания
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выборка различающихся строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]