Re: Table1 exclude Table2

2006-09-06 Пенетрантность ����������� ������

 íÏÖÎÏ left join ÉÓÐÏÌØÚÏ×ÁÔØ É where t2.somefield is null, ÏÄÎÁËÏ, not 
 exists ÌÕÞÛÅ imho. óÐÅÃÉÁÌØÎÏÇÏ ÏÐÅÒÁÔÏÒÁ (ËÒÏÍÅ not exists) ÎÅ 
 ÐÒÉÐÏÍÉÎÁÀ.

ÞÅÍ ÜÔÏ not exist ÌÕÞÛÅ???
ÅÓÌÉ Ñ ×ÓÅ ÐÒÁ×ÉÌØÎÏ ÐÕÔÁÀ, ÔÏ îïô åëúéóô ×ÙÐÏÌÎÑÅÔ ×ÙÂÏÒËÕ ÚÁÐÉÓÅÊ ÎÁ 
ËÁÖÄÕÀ ÚÁÐÉÓØ ÐÅÒ×ÏÊ ÔÁÂÌÉÃÙ
× ÔÏ ×ÒÅÍÑ, ËÁË ìåæô äöïêî ÅÄÉÎÏÖÄÙ ÏÂßÅÄÉÎÑÅÔ Ä×Å ×ÙÂÏÒËÉ

not exist  ÍÏÖÅÔ ÄÁÔØ ×ÙÊÇÒÙÛØ ÔÏÌØËÏ ÅÓÌÉ ÔÅÂÅ ÎÁÄÏ ÎÅÓËÏÌØËÏ ÐÅÒ×ÙÈ 
ÚÁÐÉÓÅÊ ÉÚ ÓÒÁ×ÎÉÔÅÌØÎÏ ÂÏÌØÛÏÊ ×ÙÂÏÒËÉ 





Re: Table1 exclude Table2

2006-09-06 Пенетрантность Мадорский Г . В .





t1 left join t2 и проверка какого нибудь not null
поля из второй таблицы на null.



ежели поле, по которому join выполняется, будет неуникальным, то еще и 
distinct понадобиться.




Чего-то с утра фигню какую-то несу... :)


With b/r. Gleb.







Re: Table1 exclude Table2

2006-09-06 Пенетрантность Konstantin R. Beliaev


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

2006-09-06 Пенетрантность Alexander A. Venikov


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

2006-09-06 Пенетрантность Alexander A. Venikov


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

2006-09-05 Пенетрантность Oleg LOA
Konstantin R. Beliaev [EMAIL PROTECTED] wrote in message news:[EMAIL 
PROTECTED]
 
 Напомните, плиз: есть ли в полуторке оператор, позволяющий вывести 
 данные из таблицы 1 _кроме_ данных, присутствующих в таблице 2 ?
 Можно конечно использовать not exists(), но в памяти вертится какой-то 
 специальный оператор...
 Или ошибаюсь?

minus но его нет

Re: Table1 exclude Table2

2006-09-05 Пенетрантность Yurij


Konstantin R. Beliaev wrote:
 Напомните, плиз: есть ли в полуторке оператор, позволяющий вывести
 данные из таблицы 1 _кроме_ данных, присутствующих в таблице 2 ?

t1 left join t2 и проверка какого нибудь not null
поля из второй таблицы на null.



Re: Table1 exclude Table2

2006-09-05 Пенетрантность Alexander A. Venikov


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