- 1
- 2
- 3
- 4
Select *
...
FROM (SELECT * FROM rtv_head) h
...
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−132
Select *
...
FROM (SELECT * FROM rtv_head) h
...
Наверно с запасом на будущее - "чтобы просто вписать лишь необходимые поля"
DBdev 06.02.2012 12:01 # −1
Denisnetkin 06.02.2012 12:55 # +2
DBdev 06.02.2012 13:44 # 0
Вопрос, как Вы это подали.
Вот выложили бы весь запрос, или хотя бы его верхнюю часть до момента с подзапросом.
Написали бы в комментарии, что-то типа "Автор явно не понимает как использовать подзапросы"
А это, что у Вас там? "чтобы просто вписать лишь необходимые поля" - это цитата ответа автора кода на Ваш вопрос к нему "Зачем ты так накодил?"? Это нам догадываться надо самим, что Вы нам донести хотите в виде говнистости?
Denisnetkin 06.02.2012 13:52 # +1
Мой коммент к куску - это стеб над автором.
DBdev 06.02.2012 14:01 # 0
т.к. не имеет значения вообще какие поля выбираются
Больше сходу ничего вспомнить не могу, но для себя НЕ исключаю возможности увидеть где-то подзапрос со *.
ЗЫЖ Да, я вижу что в Вашем посте стоит FROM(подзапрос), что автоматически исключает приведенный мой пример. Но на Ваш вопрос "Какой смысл писать подзапрос чтобы выбрать ВСЮ таблицу?" отвечает.
eth0 06.02.2012 13:11 # +1
roman-kashitsyn 06.02.2012 13:12 # +5
мне это утверждение кажется спорным...
DBdev 06.02.2012 13:25 # +1
3.14159265 06.02.2012 14:24 # 0
Вложенные таблицы всегда быстрее временных и во многих случаях они упрощают жизнь.
DBdev 06.02.2012 15:06 # 0
Только ссылку на реализацию какой-то конкретной СУБД давать не надо, а то знаете ли, в одной СУБД по одному назвали, в другой по другому.
3.14159265 06.02.2012 17:26 # 0
Кратко: различие в том что вложенная таблица практически всегда превратится в joinы. Это происходит из-за ограничения: в ней нельзя использовать поля из основного запроса, в подзапросе можно. И такой подзапрос называется коррелированным.
3.14159265 06.02.2012 17:33 # +1
Также в некоторых СУБД можно делать top на вложенных таблицах и сортировать их, и в этом случае они не будут существенно отличаться по скорости от подзапросов.
Но главное отличие в том что вложенные таблицы можно джойнить на другие по нескольким полям, вот так:
А в подзапросе можно только одно поле в in использовать. И всё.
DBdev 06.02.2012 21:32 # 0
ЗЫЖ В стандарте ANSI SQL 2003 http://savage.net.au/SQL/sql-2003-2.bnf.html
<derived table> ::= <table subquery>
3.14159265 06.02.2012 22:59 # 0
Просто я привык, selectы вложенные в условия называть подзапросами, а selectы в поле from вложенными таблицами, потому что там перечисляют именно таблицы.
>нифига не derived tables, а inline views
Кстати звучит.
eth0 06.02.2012 21:07 # 0
3.14159265 06.02.2012 21:22 # 0
eth0 07.02.2012 07:42 # +1
С подзапросами в виде таблиц не сталкивался, ибо ваистенуне нужно оно никогда мне, но, вероятно, реиспользовать её явно не получится, не?
3.14159265 07.02.2012 13:49 # 0
>может быть использован в любом нижележащем with'е.
Да, так однозначно не получится.
Но ведь with есть далеко не везде, а табличные подзапросы - стандартны.
eth0 07.02.2012 15:01 # 0
И это угнетает.
DBdev 07.02.2012 20:29 # +1
Мне определение того, что подзапрос - это более широкое понятие, чем вложенная таблица и вложенная таблица - это частный случай подзапроса, больше нравится, нежели строгое деление на подзапрос и вложенная таблица.
3.14159265 08.02.2012 16:27 # 0
>Все таки "подзапрос", но только табличный, да? :)
Ну раз даже в стандарте написали "table subquery". :)
Denisnetkin 07.02.2012 15:41 # 0
Так что если и выглядит лаконично, то нифига не эффективно.
eth0 07.02.2012 17:03 # 0
Denisnetkin 07.02.2012 18:02 # 0