Re: Тиражирование параметра запроса
От: vmpire Россия  
Дата: 16.09.09 09:05
Оценка: 2 (1)
Здравствуйте, bedward70, Вы писали:

B>вот пример

B>
B>SELECT * FROM table1 t1, (SELECT ? AS value from dual) param WHERE t1.column1 = param.value AND t1.column2 IN (SELECT t2.column2 FROM table2 t2 WHERE t2.column1 = param.value)
B>


B>Может кто знает более элегантное решение? Может что-то есть в ANSI стандарте?

Как передавать параметры в запрос зависит от SQL-сервера и используемых клиентских библиотек, стандарт это не описывает.
Для данного конкретного запроса, если Oracle не очень старый более элегантное решение будет переписать его через нормальный JOIN.
А вообще, ваше решение вполне нормальное
Тиражирование параметра запроса
От: bedward70 Россия http://www.bedward70.narod.ru/
Дата: 16.09.09 08:10
Оценка:
Добрый день, всем!

есть sql запрос. Пример:

SELECT * FROM table1 t1 WHERE t1.column1 = ? AND t1.column2 IN (SELECT t2.column2 FROM table2 t2 WHERE t2.column1 = ?)


Причем, в оба воросика идет одно значение...

Хотелось бы обойтись одним вопросиком. Может кто знает как?

вот пример
SELECT * FROM table1 t1, (SELECT ? AS value from dual) param WHERE t1.column1 = param.value AND t1.column2 IN (SELECT t2.column2 FROM table2 t2 WHERE t2.column1 = param.value)


Может кто знает более элегантное решение? Может что-то есть в ANSI стандарте?

Заранее спасибо!

Эд
С уважением, Эдвард
Re: Тиражирование параметра запроса
От: sunsquirel США  
Дата: 16.09.09 10:07
Оценка:
Здравствуйте, bedward70, Вы писали:

B>Может кто знает более элегантное решение? Может что-то есть в ANSI стандарте?


Хм, зачем столько городить, если можно просто сджойнить две таблицы?? Джойны поддерживает любая база, так как они входят в ANSI-стандарт.
Re[2]: Тиражирование параметра запроса
От: vmpire Россия  
Дата: 16.09.09 10:43
Оценка:
Здравствуйте, sunsquirel, Вы писали:

S>Джойны поддерживает любая база, так как они входят в ANSI-стандарт.

Смелое утверждение и не менее смелая аргументация
Re: Тиражирование параметра запроса
От: . Великобритания  
Дата: 16.09.09 13:14
Оценка:
bedward70 wrote:

> Хотелось бы обойтись одним вопросиком. Может кто знает как?

В данном случае вместо второго вопросика можно подставить t1.column1
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Тиражирование параметра запроса
От: Formidable  
Дата: 16.09.09 19:16
Оценка:
Здравствуйте, ., Вы писали:
>> Хотелось бы обойтись одним вопросиком. Может кто знает как?
.>В данном случае вместо второго вопросика можно подставить t1.column1
Тогда другой запрос получится: подзапрос с t2 будет коррелировать с IN (SELECT ). А "глупый" оптимизатор может не понять что t1.column1 принимает одно и тоже значение. А это чревато другим планом исполнения.
Re[3]: Тиражирование параметра запроса
От: . Великобритания  
Дата: 16.09.09 19:26
Оценка:
Formidable wrote:

> Тогда другой запрос получится: подзапрос с t2 будет коррелировать с IN

> (SELECT ). А "глупый" оптимизатор может не понять что t1.column1
> принимает одно и тоже значение. А это чревато другим планом исполнения.
Premature optimization? А по-моему корелляция уже есть по t1.column2 IN (SELECT t2.column2... ). И вообще, не стоит априори считать оптимизатор глупым.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Тиражирование параметра запроса
От: bedward70 Россия http://www.bedward70.narod.ru/
Дата: 17.09.09 02:55
Оценка:
Здравствуйте, all!

Чтоб успокоить заказчика, перепишу через JOIN, чтоб это было как ANSI стандарте.

Спасибо всем!
С уважением, Эдвард
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.