Re: [SQL] нуб вопрос

x88888

туплю, подскажите плз кейворды для гугления
есть селект типа
 select (select max(field_3) from big_table where field_1 = 123 and field_2 = 0 (select max(field_3) from big_table where field_1 = 123 and field_2 = 1) 

хочется, чтобы сначала сервер сделал сначала
 select * from big_table where field_1 = 123 

а два других уже из этой. за 1 запрос.
наверное нужное ключевое слово транзакции, да?

x88888

1 запрос это я загнул конечно, в результате их будет 3, но тут важно чтобы на результат не повлиял активный инсертинг/апдейтинг в эту таблицу кем-то другим

hwh2010

хочется, чтобы сначала сервер сделал сначала
зачем хочется? чтобы быстрее работало или что?
наверное нужное ключевое слово транзакции, да?
не понимаю, зачем оно могло бы быть нужно
если ты точно умнее сервера и знаешь как быстрее работает, а он не знает — напиши

select max(case when field_2 = 0 then field_3 else null end max(case when field_2 = 1 then field_3 else null end) from big_table where field_1 = 123

hwh2010

1 запрос это я загнул конечно, в результате их будет 3, но тут важно чтобы на результат не повлиял активный инсертинг/апдейтинг в эту таблицу кем-то другим
http://ru.wikipedia.org/wiki/%D3%F0%EE%E2%ED%E8_%E8%E7%EE%EB...

Maximilian

в mysql можно только так
— 1 запрос
create temporary table table_tmp
select max(field_3) from big_table where field_1 = 123 ;
— 2 запрос
select
(select max(field_3) from table_tmp where field_2 = 0
(select max(field_3) from table_tmp where field_2 = 1) ;

dava

а там нет уровня изоляции snapshot?
в оракле select for update можно еще юзать, запрещая изменения выселекченных строк, если не хочется с уровнями изоляции играться; в ms sql вроде либо вручную запариваться с наложением блокировок, либо уровни изоляции

ingener

че-то я ниасилил, а почему нельзя

select max(field_3field_2 from big_table where field_1 = 123 and field_2 in (0,1) group by field_2

?

kill-still

можно, можно и через
Over (partition by ..
но так как баштанов написал будет быстрее.

zya369

но так как баштанов написал будет быстрее.

ну, чтобы это точно было правдой надо бы туда условие добавить на field_2 in (0,1)
Оставить комментарий
Имя или ник:
Комментарий: