powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
25 сообщений из 37, страница 1 из 2
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504211
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Вопрос-развлекуха. Никакого практического смысла, просто ради "документирования артефакта".
Оказывается, у маздая и оракла разрешено делать union из источников данных, заключенных в скобки:
Код: sql
1.
2.
3.
4.
5.
6.
7.
-- ss
select t.* 
from (
	(select 1 k) 
	union all 
	(select 2 k)
)t


Код: plsql
1.
2.
3.
4.
5.
6.
7.
-- ora
select t.* 
from (
	(select 1 k from dual) 
	union all 
	(select 2 k from dual)
)t



У нас же в ответ на что-то подобное:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
C:\MIX>isql 192.168.0.201/3252:employee
Database:  192.168.0.201/3252:employee
SQL> select t.*
CON> from (
CON>    (select 1 k from rdb$database) -- x
CON>    union all
CON>    (select 2 k from rdb$database) -- y
CON> )t
CON> ;

- идёт посыл в лес:
Код: plaintext
1.
2.
3.
4.
5.
Statement failed, SQLSTATE = 42000
Dynamic SQL Error
-SQL error code = -104
-Token unknown - line 4, column 2
-union
(этот же посыл будет, если присвоить "источникам" имена `x` & `y` - они показаны выше закомментаренными).

Это:
1) кто-то из "больших братьев" грубейшим образом нарушает SQL-стандарт ?
*** XOR ***
2) кое-кто из "маленьких но шустрых" чуть-чуть не дотягивает до него ?
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504213
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

нафига оно тебе надо? Я не знаю что там говорит стандарт, но по мне скобки здесь не только совершенно не к чему, но и неверны.
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504215
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениснафига оно тебе надо? Я не знаю что там говорит стандарт, но по мне скобки здесь не только совершенно не к чему, но и неверны.Да мне-то оно нахрен не нужно, разумеется.
Насторожило просто, что не только в маздае такое разрешается .
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504233
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так тоже не работает почему-то:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select t.*
from (
    select 1 k from rdb$database
    union all
    (
      select 2 k from rdb$database
      union all
      select 3 k from rdb$database
    )
) t
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504240
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

а должно? Какой смысл вкладывается в эти скобки?
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504243
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лично моё мнение. Если мы заключаем запрос в скобки, то подразумеваем либо подзапрос, возвращающий одну запись, либо производную таблицу. И то и другое с точки зрения синтаксиса union all недопустимо
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504250
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж :)
Код: sql
1.
2.
3.
4.
5.
6.
select t.*
from (
    select 1 k from rdb$database
    union all
    select 2 k from rdb$database order by 1 desc
) t


выводит:
2
1

Код: sql
1.
2.
3.
4.
5.
6.
select t.*
from (
    select 1 k from rdb$database order by 1
    union all
    select 2 k from rdb$database
) t


Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 4, column 5.
union.

Не пойму как люди этим union пользуются... Или они интуитивно не пользуются? :)
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504256
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид> 1) кто-то из "больших братьев" грубейшим образом нарушает SQL-стандарт ?

AFAIK, да.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504258
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee>Вот так тоже не работает почему-то:
NickDee> select 1 k from rdb$database
NickDee>union all
NickDee>(
NickDee>select 2 k from rdb$database

Это мало чем отличается от исходного
варианта - было (а) + (b), стало а + (b).

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504260
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Не пойму как люди этим union пользуются...

Доку читают. В отличие от тебя. :)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504284
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамNickDee> Не пойму как люди этим union пользуются...

Доку читают. В отличие от тебя. :)

Я думал что union соединяет два набора данных. А аказывается есть нюансы :)
Естественно в интернетах есть толпы наступивших на грабли...
Возможно кстати, что скобочки в MSSQL и ORACLE решают именно вопрос внесения order by в селект:
Код: sql
1.
2.
3.
4.
  (select F from T order by 1)
  union all
  (select F from T order by 1 desc)
  order by 1
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504289
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот тут человек говорит, что в других движках скобки используются именно для отделения order by:
http://stackoverflow.com/questions/354224/combining-union-all-and-order-by-in-firebird
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38504385
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Я думал что union соединяет два набора данных.

Соединяет. Набор данных получают запросом select, а не скобочками.

> Возможно кстати, что скобочки в MSSQL и ORACLE
> решают именно вопрос внесения order by в селект:

Вполне возможно. В случае FB придётся писать
полноценный DT, а не только внутренний обрубок.

NickDee> А вот тут человек говорит, что в других движках
NickDee> скобки используются именно для отделения order by:

Где это он там такое говорит? Он там говорит
практически противоположное. А вообще, SO
удивил, конечно - 4 ответа, и все неправильные.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38505167
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А с другой стороны: ведь с джойнами можно примерно так же делать, как в исходном посту с юнионами трюк:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> set list on;
SQL> select * from ( (select 1 x from rdb$database) s join (select 1 y from rdb$database) t on s.x=t.y );

X                               1
Y                               1


SQL> select * from (select 1 x from rdb$database) s join (select 1 y from rdb$database) t on s.x=t.y;

X                               1
Y                               1

Кажись, дело было так: "джойны сделали, а про юнионы забыли" :-)
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38505184
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть такое в стандарте. Но было ли во времена ФБ 2.0 - не знаю. Если было, то пропустили.
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38505189
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

нефига не так. Вот тебе пример

t1 и t2 таблицы пусть даже с одинаковым названием полей и типами столбцов

Код: sql
1.
2.
select t1.id as id1, t2.id as id2
from t1 join t2 on t1.id = t2.id



можно

Код: sql
1.
2.
select *
from (t1 union all t2)



нельзя
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38505190
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

о как!
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38505198
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

ну раз ДЕ сказал, что такое есть в стандарте, можешь тикет на улучшение создать. Авось будет свободное время прикрутят
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38505229
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисможешь тикет на улучшение создать. Авось будет свободное время прикрутятКогда я лезу в трекер с улучшениями, то там всегда как-то быстро появляется Шон "Коннери". Странно даже...
Так что лучше всего, если ты создашь (без шуток). Но вообще-то, и без этой хрени нормально живётся.
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38505249
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

дык мне оно не нужно. Я до сегодняшнего дня думал что это вообще не правильно. Даже если сделают, то пользоваться не буду.
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38505266
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0xFF. я бы все свои тикеты про улучшения променял на одно: 'retrieve table data using index only scan (in both directions :))'. Но это в следующей жизни будет, КМК...
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38505307
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид0xFF. я бы все свои тикеты про улучшения променял на одно: 'retrieve table data using index only scan (in both directions :))'. Но это в следующей жизни будет, КМК...

А как же:
- MERGE/HASH JOIN для OUTER JOIN
- материлизация для devired tables
- HASH GROUP BY

Кстати ДЕ говорил, что для ODS 12 это возможно при некоторых условиях (наподобие того как сделали в PG), но в тройке наверное не будет. Может в 3.1
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38505320
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисА как же:
- MERGE/HASH JOIN для OUTER JOIN
- материлизация для devired tables
- HASH GROUP BY"О-о-о!! я-я, кемска волост! О-о, я, я!"
Но они не дадут уменьшения в два раза числа обращений к диску для одного и того же запроса. Разве что материализация, если там есть что материализовывать.

Симонов ДенисКстати ДЕ говорил, что для ODS 12 это возможно при некоторых условиях (наподобие того как сделали в PG), но в тройке наверное не будет. Может в 3.1Это в где он так сказал ? Тынц дай, плз.
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38505355
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисэто возможно при некоторых условиях
не забывай уточнять, что "это" не будет index only scan в чистом виде. Как впрочем и в PGSQL.
...
Рейтинг: 0 / 0
union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
    #38505370
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

извиняюсь не совсем точно выразился

Таблоид,

вот 12891566
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / union из "derived"-источников (начинаются НЕ с SELECT): что там в стандарте ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]