Текущий архив: 2004.01.13;
Скачать: CL | DM;
ВнизПомогите с простым запросом Найти похожие ветки
← →
Ренат (2003-12-16 16:08) [0]есть 2 таблицы a и b
__________ ____________
1 1
2 2
3
4
__________ _____________
как выбрать поля, содержащие 3 и 4 с учетом того, что обе таблицы большого размера (not in, not exists не подходит)?
← →
Ega23 (2003-12-16 16:11) [1]select a.Column from a, b
where a.Column<>b.Column
Это что-ли?
← →
Johnmen (2003-12-16 16:17) [2]Почему not exists не подходит ?
← →
Sandman25 (2003-12-16 16:28) [3][2] Johnmen © (16.12.03 16:17)
+ index сделать.
← →
Ренат (2003-12-16 16:31) [4]
> Почему not exists не подходит ?
а быстрее нельзя?
← →
Reindeer Moss Eater (2003-12-16 16:31) [5]select a.Column from a, b
where a.Column<>b.Column
Это что-ли?
Это чуть меньше, чем в Декартовом произведении обеих таблиц.
То есть - не Это.
← →
Sandman25 (2003-12-16 16:37) [6][4] Ренат © (16.12.03 16:31)
Можно. Если будет индекс по связываемому полю.
← →
Ренат (2003-12-16 16:38) [7]в обеих таблицах?
← →
Ega23 (2003-12-16 16:41) [8]
> Это чуть меньше, чем в Декартовом произведении обеих таблиц.
А записей сколько? Порядок?
← →
Reindeer Moss Eater (2003-12-16 16:44) [9]Ega23 © (16.12.03 16:41) [8]
> Это чуть меньше, чем в Декартовом произведении обеих таблиц.
А записей сколько? Порядок?
Твой запрос вернет
1
2
3
3
4
4
← →
NickBat (2003-12-16 16:45) [10]Такое подойдет? Работает вроде бы быстро.
select
t1.TF,
t1.F1,
t1.F2
from TEST t1
left join test2 t2 on t1.f1=t2.f1
where t2.f1 is null
← →
Ренат (2003-12-16 16:45) [11]около 10 тыс. в обеих таблицах interbase
← →
Johnmen (2003-12-16 17:08) [12]>Ренат © (16.12.03 16:45)
Это мелочь...:)
← →
Ega23 (2003-12-16 17:11) [13]
> Твой запрос вернет
> 1
> 2
> 3
> 3
> 4
> 4
Точно. Тогда через join
← →
Ega23 (2003-12-16 17:13) [14]Кстати, а почему not in не подходит:
Select distinct Column1
?
from a
where Column1 not in
(Select distinct Column1 from b)
← →
Sandman25 (2003-12-16 17:28) [15][7] Ренат © (16.12.03 16:38)
в обеих таблицах?
Нет, только в той, что в Exists.
← →
Johnmen (2003-12-16 17:38) [16]>Ренат ©
Вариантов несколько
1. С помощью соединения, NickBat © (16.12.03 16:45)
2. С помощью подзапроса с EXISTS (уже говорили)
3.SELECT A.Column FROM A
WHERE NOT (A.Column = SOME (SELECT B.Column FROM B))
Какой из них быстрее - зависит не только от наличия индексов, Sandman25 © (16.12.03 16:28), но и от содержимого таблиц.
Запрос с IN, Ega23 © (16.12.03 17:13), пожалуй, самый медленный.
Вобщем, проверяй сам...
← →
JibSkeart (2003-12-16 17:39) [17]Ага и еще посмотреть план выполнения :)
← →
Ega23 (2003-12-16 17:51) [18]
> Запрос с IN, Ega23 © (16.12.03 17:13), пожалуй, самый
> медленный.
Можно ещё медленней придумать :-)
Страницы: 1 вся ветка
Текущий архив: 2004.01.13;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.008 c