Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Вниз

Помогите с простым запросом   Найти похожие ветки 

 
Ренат   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
7-37949
nollie
2003-10-29 18:25
2004.01.13
com


1-37716
MScorp
2003-12-30 17:58
2004.01.13
Вывод текста в консоль


14-37892
excess
2003-12-22 10:09
2004.01.13
Чат мастеров.


8-37800
Незнайко
2003-09-13 12:45
2004.01.13
DynamicSkinForm


1-37700
Frogkiller
2003-12-25 22:52
2004.01.13
Ошибка при запуске потока





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский