Re: Table1 exclude Table2
íÏÖÎÏ left join ÉÓÐÏÌØÚÏ×ÁÔØ É where t2.somefield is null, ÏÄÎÁËÏ, not exists ÌÕÞÛÅ imho. óÐÅÃÉÁÌØÎÏÇÏ ÏÐÅÒÁÔÏÒÁ (ËÒÏÍÅ not exists) ÎÅ ÐÒÉÐÏÍÉÎÁÀ. ÞÅÍ ÜÔÏ not exist ÌÕÞÛÅ??? ÅÓÌÉ Ñ ×ÓÅ ÐÒÁ×ÉÌØÎÏ ÐÕÔÁÀ, ÔÏ îïô åëúéóô ×ÙÐÏÌÎÑÅÔ ×ÙÂÏÒËÕ ÚÁÐÉÓÅÊ ÎÁ ËÁÖÄÕÀ ÚÁÐÉÓØ ÐÅÒ×ÏÊ ÔÁÂÌÉÃÙ × ÔÏ ×ÒÅÍÑ, ËÁË ìåæô äöïêî ÅÄÉÎÏÖÄÙ ÏÂßÅÄÉÎÑÅÔ Ä×Å ×ÙÂÏÒËÉ not exist ÍÏÖÅÔ ÄÁÔØ ×ÙÊÇÒÙÛØ ÔÏÌØËÏ ÅÓÌÉ ÔÅÂÅ ÎÁÄÏ ÎÅÓËÏÌØËÏ ÐÅÒ×ÙÈ ÚÁÐÉÓÅÊ ÉÚ ÓÒÁ×ÎÉÔÅÌØÎÏ ÂÏÌØÛÏÊ ×ÙÂÏÒËÉ
Re: Table1 exclude Table2
t1 left join t2 и проверка какого нибудь not null поля из второй таблицы на null. ежели поле, по которому join выполняется, будет неуникальным, то еще и distinct понадобиться. Чего-то с утра фигню какую-то несу... :) With b/r. Gleb.
Re: Table1 exclude Table2
Alexander A. Venikov wrote: Можно left join использовать и where t2.somefield is null, однако, not exists лучше imho. Специального оператора (кроме not exists) не припоминаю. У Грабера нашел оператор EXCEPT: select A EXCEPT select B но, как я понимаю, его нет.
Re: Table1 exclude Table2
Hello, Качановский! You wrote on Wed, 6 Sep 2006 09:28:22 +0300: Можно left join использовать и where t2.somefield is null, однако, not exists лучше imho. Специального оператора (кроме not exists) не припоминаю. КД чем это not exist лучше??? КД если я все правильно путаю, то НОТ ЕКЗИСТ выполняет КД выборку записей на каждую запись первой таблицы КД в то время, как ЛЕФТ ДЖОЙН единожды объединяет две КД выборки И ты с гарантией точно можешь сказать, как это сервер унутре себя делает? Ладно, чтобы не быть голословным. Есть таблица договоров по ссудам и таблица платежей по этим самым ссудам. Выбираю договоры, по которым еще не было платежей. Вариант с not exists: select * from agrees a where not exists (select agr_id from payments where agr_id=a.id) -- Performance info -- Prepare time = 0ms Execute time = 16 ms Avg fetch time = 0,66 ms Current memory = 648 176 Max memory = 660 160 Memory buffers = 2 048 Reads from disk to cache = 0 Writes from cache to disk = 0 Fetches from cache = 3 633 Вариант с left join select * from agrees a left join payments p on p.agr_id=a.id where p.agr_id is null -- Performance info -- Prepare time = 0ms Execute time = 47ms Avg fetch time = 1,00 ms Current memory = 645 292 Max memory = 660 160 Memory buffers = 2 048 Reads from disk to cache = 0 Writes from cache to disk = 0 Fetches from cache = 15 399 Так что... Запрос не по одному разу выполнялся, в среднем соотношение в пользу варианта с not exists. Возможно, на других данных картина будет несколько другой, но вот так на паре наобум взятых таблиц я получил явное преимущество not exists по сравнению с left join. Удач -- Alexander A. Venikov, Tobolsk, Russia Real e-mail address is venixangry_dogtndottobdotru
Re: Table1 exclude Table2
Hello, Tonal! You wrote on Wed, 06 Sep 2006 15:25:30 +0700: T А если второй вариант чуть подправить? T select a.* from agrees a T left join payments p on p.agr_id=a.id T where p.agr_id is null Уже ответил. Та же мысль пришла в голову чуть раньше. :) Удач -- Alexander A. Venikov, Tobolsk, Russia Real e-mail address is venixangry_dogtndottobdotru
Re: Table1 exclude Table2
Konstantin R. Beliaev [EMAIL PROTECTED] wrote in message news:[EMAIL PROTECTED] Напомните, плиз: есть ли в полуторке оператор, позволяющий вывести данные из таблицы 1 _кроме_ данных, присутствующих в таблице 2 ? Можно конечно использовать not exists(), но в памяти вертится какой-то специальный оператор... Или ошибаюсь? minus но его нет
Re: Table1 exclude Table2
Konstantin R. Beliaev wrote: Напомните, плиз: есть ли в полуторке оператор, позволяющий вывести данные из таблицы 1 _кроме_ данных, присутствующих в таблице 2 ? t1 left join t2 и проверка какого нибудь not null поля из второй таблицы на null.
Re: Table1 exclude Table2
Hello, Konstantin! You wrote on Tue, 05 Sep 2006 18:40:02 +0400: KRB Напомните, плиз: есть ли в полуторке оператор, позволяющий KRB вывести данные из таблицы 1 _кроме_ данных, присутствующих KRB в таблице 2 ? Можно конечно использовать not exists(), но KRB в памяти вертится какой-то специальный оператор... KRB Или ошибаюсь? Можно left join использовать и where t2.somefield is null, однако, not exists лучше imho. Специального оператора (кроме not exists) не припоминаю. Удач -- Alexander A. Venikov, Tobolsk, Russia Real e-mail address is venixangry_dogtndottobdotru