- 1
- 2
- 3
- 4
Select *
...
FROM (SELECT * FROM rtv_head) h
...
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−132
Select *
...
FROM (SELECT * FROM rtv_head) h
...
Наверно с запасом на будущее - "чтобы просто вписать лишь необходимые поля"
Вопрос, как Вы это подали.
Вот выложили бы весь запрос, или хотя бы его верхнюю часть до момента с подзапросом.
Написали бы в комментарии, что-то типа "Автор явно не понимает как использовать подзапросы"
А это, что у Вас там? "чтобы просто вписать лишь необходимые поля" - это цитата ответа автора кода на Ваш вопрос к нему "Зачем ты так накодил?"? Это нам догадываться надо самим, что Вы нам донести хотите в виде говнистости?
Мой коммент к куску - это стеб над автором.
т.к. не имеет значения вообще какие поля выбираются
Больше сходу ничего вспомнить не могу, но для себя НЕ исключаю возможности увидеть где-то подзапрос со *.
ЗЫЖ Да, я вижу что в Вашем посте стоит FROM(подзапрос), что автоматически исключает приведенный мой пример. Но на Ваш вопрос "Какой смысл писать подзапрос чтобы выбрать ВСЮ таблицу?" отвечает.
мне это утверждение кажется спорным...
Вложенные таблицы всегда быстрее временных и во многих случаях они упрощают жизнь.
Только ссылку на реализацию какой-то конкретной СУБД давать не надо, а то знаете ли, в одной СУБД по одному назвали, в другой по другому.
Кратко: различие в том что вложенная таблица практически всегда превратится в joinы. Это происходит из-за ограничения: в ней нельзя использовать поля из основного запроса, в подзапросе можно. И такой подзапрос называется коррелированным.
Также в некоторых СУБД можно делать top на вложенных таблицах и сортировать их, и в этом случае они не будут существенно отличаться по скорости от подзапросов.
Но главное отличие в том что вложенные таблицы можно джойнить на другие по нескольким полям, вот так:
А в подзапросе можно только одно поле в in использовать. И всё.
ЗЫЖ В стандарте ANSI SQL 2003 http://savage.net.au/SQL/sql-2003-2.bnf.html
<derived table> ::= <table subquery>
Просто я привык, selectы вложенные в условия называть подзапросами, а selectы в поле from вложенными таблицами, потому что там перечисляют именно таблицы.
>нифига не derived tables, а inline views
Кстати звучит.
С подзапросами в виде таблиц не сталкивался, ибо ваистенуне нужно оно никогда мне, но, вероятно, реиспользовать её явно не получится, не?
>может быть использован в любом нижележащем with'е.
Да, так однозначно не получится.
Но ведь with есть далеко не везде, а табличные подзапросы - стандартны.
И это угнетает.
Мне определение того, что подзапрос - это более широкое понятие, чем вложенная таблица и вложенная таблица - это частный случай подзапроса, больше нравится, нежели строгое деление на подзапрос и вложенная таблица.
>Все таки "подзапрос", но только табличный, да? :)
Ну раз даже в стандарте написали "table subquery". :)
Так что если и выглядит лаконично, то нифига не эффективно.