Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / derived table и "автоматические" заголовки столбцов / 25 сообщений из 28, страница 1 из 2
04.10.2019, 20:09
    #39871880
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Код: plsql
1.
select b, c + 50 from t where a = 2 and b = 8 



вот так у обоих столбцов названия есть

Код: sql
1.
select * from (select b, c + 50 from t where a = 2 and b = 8) as t2



А вот так - уже внезапно нету.

Почему, зачем?

Навеяно:
https://dbfiddle.uk/?rdbms=firebird_3.0&fiddle=a1d384c4c2775c35da08f71d593b22ad

https://stackoverflow.com/questions/58226348/firebird-add-constant-to-returned-column-in-the-query/58235052
...
Рейтинг: 0 / 0
04.10.2019, 20:49
    #39871893
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Arioch,

А что значит есть, и что значит нет?
Самому бы было приятно, чтобы юзеры вот именно такой багрепорт прислали, чтобы лазить по ссылкам добывать информацию?
...
Рейтинг: 0 / 0
04.10.2019, 20:55
    #39871896
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Vlad F,

это не баг даже.

Arioch,

в первом примере столбцу далось автоматическое название. Собственно сервер свою работу сделал и ему плевать, пусть клиент мучается теперь с ним. Запрос верхнего уровня

Во-втором с автоматическим названием потенциально мучится серверу, мало-ли по нему фильтр потребуется поставить, то есть сервак просто не думает как окончательно будет использоваться dt, но видит косячный столбец, надо ругнуться.

Не знаю почему такие вопросы вообще возникают. Вроде всё интуитивно понятно
...
Рейтинг: 0 / 0
04.10.2019, 21:10
    #39871900
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Симонов Денис,

А какая разница, пусть как минимум учится оформлять.
...
Рейтинг: 0 / 0
07.10.2019, 12:01
    #39872473
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Vlad F, если ты не знаешь, что такое "есть" и что такое "нет", то объяснять тебе это надо с картинками, как в детском саду. Я - пас.

И не путай трекер с форумом, хотя если ты "нет" от "есть" не отличаешь, то это наверное завышенное требование.


Симонов Денис, нет, не понятно. Принципиальной разницы между запросами нет.

> мало-ли по нему фильтр потребуется поставить

1. и где там фильтр в запросе ? Этак можно и деление на не-константу запретить превентивно, а то "мало ли потребуется" однажды на ноль поделить.

2. а что, фильтр возможен только во втором запросе быть, в первом запросе WHERE вставить нельзя?
...
Рейтинг: 0 / 0
07.10.2019, 12:20
    #39872480
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Arioch,

успокойся уже. Запросы в FB не на столько глубоко анализируются. Принципиально это возможно, и даже сделать к нему query rewrite, но пока нет. Тут более простая схема засунул запрос в derived table, значит все поля должны быть с однозначными именами. Требовать более глубокого анализа смысла нет, если только реально не будут делать query rewrite
...
Рейтинг: 0 / 0
07.10.2019, 12:55
    #39872511
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Симонов Денис,

в каком смысле "однозначными" и в каком они сейчас "неоднозначные" ?

не нужно там query rewrite, нyжно просто "alias" скопировать на уровень вверх
...
Рейтинг: 0 / 0
07.10.2019, 12:58
    #39872514
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Arioch,

в таком. Если я напишу

Код: sql
1.
select c + 50, с + 50 form t



какие автоматические алиасы будут? Не надо запихивать искусственный интеллект куда не требуется прогибаться под нубов.
...
Рейтинг: 0 / 0
07.10.2019, 13:00
    #39872516
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Какие-нибудь да будут.

И эта "проблема" - она одинаковая для обоих запросов, что с DT что без DT
...
Рейтинг: 0 / 0
07.10.2019, 13:05
    #39872519
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Arioch,

да, да. Добавляем неочевидное поведение. Сначала позволяем твою хрень, потом можно писать вот так

Код: sql
1.
2.
3.
select * 
from (select b, c + 50 from t where a = 2 and b = 8) as t2
where "ADD" = 58



Да именно такой алиас выдан автоматически!
Ну его нах
...
Рейтинг: 0 / 0
07.10.2019, 13:45
    #39872561
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Симонов Денисможно писать вот так

а это уже твои домыслы, и они противоречат моим

Ariochа что, фильтр возможен только во втором запросе быть, в первом запросе WHERE вставить нельзя?

но даже если твои домыслы верны, то

AriochЭтак можно и деление на не-константу запретить превентивно, а то "мало ли потребуется" однажды на ноль поделить.
...
Рейтинг: 0 / 0
07.10.2019, 13:47
    #39872565
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Arioch,

в твоей же логике, почему здесь можно, а здесь нельзя. Алиас же наружу пробросили
...
Рейтинг: 0 / 0
07.10.2019, 14:06
    #39872585
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Симонов Денис,

меня вполне устроит, чтобы "нигде нельзя"

ну или чтобы "везде можно", тоже устроит, хотя и меньше

я против "тут читаем, тут не читаем, тут рыбу заворачивали"
...
Рейтинг: 0 / 0
07.10.2019, 14:24
    #39872607
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Arioch,

Насчёт нигде нельзя в другие СУБД посмотри. Такой вопрос мог возникнуть только у тех кто вообще никогда не пользовался ни одной СУБД. Все остальные привыкли уже. Поведение примерно у всех одинаковое.
...
Рейтинг: 0 / 0
07.10.2019, 18:49
    #39872868
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Любители "*" должны страдать.
...
Рейтинг: 0 / 0
08.10.2019, 02:06
    #39873086
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Ivan_Pisarevsky,

кстати, в одной недавней базе. В процедуре запрос select * from ... into ....
С момента создания этой процедуры в таблицу добавилось 3 столбца.
Собственно, процедура работает, но не перекомпилируется.
А могла бы, если вместо * столбцы были бы явно указаны.
...
Рейтинг: 0 / 0
08.10.2019, 03:35
    #39873089
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Ivan_PisarevskyЛюбители "*" должны страдать.
А вот есть запрос
Код: sql
1.
2.
3.
4.
5.
6.
select a, (
          select x from z
          ... много букв
          where ...
           ) x
  from b


- на выходе два столбца: а и x
Если от подзапроса нужно два поля, (x и y), то вот так нельзя:
Код: sql
1.
2.
3.
4.
5.
select a, (
          select x, y from z
          ... очень много букв
           ) x y
  from b


- нужно подзапрос фактически повторять:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select a, (
          select x from z
          ... очень много букв
           ) x,
          (
          select y from z
          ... очень много букв, еще раз
           ) y
  from b


- или как?
В fb 2.0 вообще можно два поля из подзапроса вытянуть?
...
Рейтинг: 0 / 0
08.10.2019, 03:46
    #39873090
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
ёёёёё
Ivan_PisarevskyЛюбители "*" должны страдать.

А вот есть запрос
Код: sql
1.
2.
3.
4.
5.
6.
select a, (
          select x from z
          ... много букв
          where ...
           ) x
  from b


- на выходе два столбца: а и x
Если от подзапроса нужно два поля, (x и y), то вот так нельзя:
Код: sql
1.
2.
3.
4.
5.
select a, (
          select x, y from z
          ... очень много букв
           ) x y
  from b


- нужно подзапрос фактически повторять:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select a, (
          select x from z
          ... очень много букв
           ) x,
          (
          select y from z
          ... очень много букв, еще раз
           ) y
  from b


- или как?
В fb 2.0 вообще можно два поля из подзапроса вытянуть?

Вот так можно:

Код: sql
1.
2.
3.
4.
5.
select t1.a, t2.* 
  from b t1, (
          select x, y from z
          ... очень много букв
           ) t2 



Например
Код: sql
1.
2.
3.
select T1.RDB$SECURITY_CLASS a, T2.*
from RDB$DATABASE T1, (select RDB$DESCRIPTION x, RDB$RELATION_ID y
                       from RDB$DATABASE) T2  


Как тут без "*" ?
...
Рейтинг: 0 / 0
08.10.2019, 04:30
    #39873093
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
ёёёёё...

Вот так можно:

Код: sql
1.
2.
3.
4.
5.
select t1.a, t2.* 
  from b t1, (
          select x, y from z
          ... очень много букв
           ) t2 


...
- попробовал - оказывается, в таком варианте, в "подзапросе" t2 нельзя указывать ничего, относящееся не к контексту t1.
Т.е., вот так - можно:
Код: sql
1.
2.
3.
4.
select T1.RDB$SECURITY_CLASS A, T2.*
from RDB$DATABASE T1, (select R.RDB$DESCRIPTION X, R.RDB$RELATION_ID Y
                       from RDB$DATABASE R
                       ) T2


...а вот так - уже нельзя:
Код: sql
1.
2.
3.
4.
select T1.RDB$SECURITY_CLASS A, T2.*
from RDB$DATABASE T1, (select R.RDB$DESCRIPTION X, R.RDB$RELATION_ID Y
                       from RDB$DATABASE R
                       where R.RDB$RELATION_ID = T1.RDB$RELATION_ID) T2


Column unknown.
T1.RDB$RELATION_ID.

ЗЫ: пример я у MS SQL нашел... а у нас - не работает... :(
...
Рейтинг: 0 / 0
08.10.2019, 07:01
    #39873103
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
ёёёёё,

и не должно. Ждём LATERAL
...
Рейтинг: 0 / 0
08.10.2019, 07:22
    #39873107
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Симонов Денис,

ну, почти все можно обыграть с момента появления execute block, но ведь хочется "чистым sql". :)
...
Рейтинг: 0 / 0
08.10.2019, 07:30
    #39873108
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Симонов Денис...Ждём LATERAL
А это намечается? Даже в FB 4 нет...
...
Рейтинг: 0 / 0
08.10.2019, 07:34
    #39873111
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
ёёёёё,

согласно стандарту LATERAL позволяет вносить в derived table чужой контекст. Это как раз и будет "чистым SQL"

И кстати позволить делать реально полезный штуки. Твой пример не удачный ибо всё можно сделать и без LATERAL.
Вот пример вытащить несколько полей из сущности на последнюю дату

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT T1.col_1, T2.col_1, T2.col_2
FROM T1 CROSS JOIN LATERAL (
  SELECT T2.col_1, T2_col2
  FROM T2
  WHERE T2.id_t1 = T1.id
  ORDER BY T2.STARTDATE DESC
  FETCH FIRST ROW ONLY
)
...
Рейтинг: 0 / 0
08.10.2019, 07:37
    #39873112
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
ёёёёё,

у ДЕ есть наработки по LATERAL и ранее этот тикет планировался на 4.0.
Но сейчас сняли, не понятно будет это или отложат до 5.0.
...
Рейтинг: 0 / 0
08.10.2019, 10:04
    #39873173
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
derived table и "автоматические" заголовки столбцов
Симонов Денисёёёёё,

у ДЕ есть наработки по LATERAL и ранее этот тикет планировался на 4.0.
Но сейчас сняли, не понятно будет это или отложат до 5.0.

А я очень ждал . Реально полезная штука!
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / derived table и "автоматические" заголовки столбцов / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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