Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 derived table и "автоматические" заголовки столбцов  [new]
Arioch
Member

Откуда:
Сообщений: 11041
select b, c + 50 from t where a = 2 and b = 8 


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

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
  • 4 окт 19, 20:09    [21987109]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Vlad F
    Member

    Откуда:
    Сообщений: 986
    Arioch,

    А что значит есть, и что значит нет?
    Самому бы было приятно, чтобы юзеры вот именно такой багрепорт прислали, чтобы лазить по ссылкам добывать информацию?
    4 окт 19, 20:49    [21987128]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 10079
    Vlad F,

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

    Arioch,

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

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

    Не знаю почему такие вопросы вообще возникают. Вроде всё интуитивно понятно
    4 окт 19, 20:55    [21987132]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Vlad F
    Member

    Откуда:
    Сообщений: 986
    Симонов Денис,

    А какая разница, пусть как минимум учится оформлять.
    4 окт 19, 21:10    [21987137]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 11041
    Vlad F, если ты не знаешь, что такое "есть" и что такое "нет", то объяснять тебе это надо с картинками, как в детском саду. Я - пас.

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


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

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

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

    2. а что, фильтр возможен только во втором запросе быть, в первом запросе WHERE вставить нельзя?
    7 окт 19, 12:01    [21988056]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 10079
    Arioch,

    успокойся уже. Запросы в FB не на столько глубоко анализируются. Принципиально это возможно, и даже сделать к нему query rewrite, но пока нет. Тут более простая схема засунул запрос в derived table, значит все поля должны быть с однозначными именами. Требовать более глубокого анализа смысла нет, если только реально не будут делать query rewrite
    7 окт 19, 12:20    [21988076]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 11041
    Симонов Денис,

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

    не нужно там query rewrite, нyжно просто "alias" скопировать на уровень вверх
    7 окт 19, 12:55    [21988124]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 10079
    Arioch,

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

    select c + 50, с + 50 form t
    


    какие автоматические алиасы будут? Не надо запихивать искусственный интеллект куда не требуется прогибаться под нубов.
    7 окт 19, 12:58    [21988129]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 11041
    Какие-нибудь да будут.

    И эта "проблема" - она одинаковая для обоих запросов, что с DT что без DT
    7 окт 19, 13:00    [21988134]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 10079
    Arioch,

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

    select * 
    from (select b, c + 50 from t where a = 2 and b = 8) as t2
    where "ADD" = 58
    


    Да именно такой алиас выдан автоматически!
    Ну его нах
    7 окт 19, 13:05    [21988139]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 11041
    Симонов Денис
    можно писать вот так


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

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


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

    Arioch
    Этак можно и деление на не-константу запретить превентивно, а то "мало ли потребуется" однажды на ноль поделить.
    7 окт 19, 13:45    [21988212]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 10079
    Arioch,

    в твоей же логике, почему здесь можно, а здесь нельзя. Алиас же наружу пробросили
    7 окт 19, 13:47    [21988220]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Arioch
    Member

    Откуда:
    Сообщений: 11041
    Симонов Денис,

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

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

    я против "тут читаем, тут не читаем, тут рыбу заворачивали"
    7 окт 19, 14:06    [21988253]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 10079
    Arioch,

    Насчёт нигде нельзя в другие СУБД посмотри. Такой вопрос мог возникнуть только у тех кто вообще никогда не пользовался ни одной СУБД. Все остальные привыкли уже. Поведение примерно у всех одинаковое.
    7 окт 19, 14:24    [21988288]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Ivan_Pisarevsky
    Member

    Откуда: НН
    Сообщений: 8393
    Любители "*" должны страдать.
    7 окт 19, 18:49    [21988677]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    kdv
    Member

    Откуда: iBase.ru
    Сообщений: 28280
    Ivan_Pisarevsky,

    кстати, в одной недавней базе. В процедуре запрос select * from ... into ....
    С момента создания этой процедуры в таблицу добавилось 3 столбца.
    Собственно, процедура работает, но не перекомпилируется.
    А могла бы, если вместо * столбцы были бы явно указаны.
    8 окт 19, 02:06    [21988987]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    ёёёёё
    Member

    Откуда:
    Сообщений: 1306
    Ivan_Pisarevsky
    Любители "*" должны страдать.

    А вот есть запрос
    select a, (
              select x from z
              ... много букв
              where ...
               ) x
      from b
    

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

    - нужно подзапрос фактически повторять:
    select a, (
              select x from z
              ... очень много букв
               ) x,
              (
              select y from z
              ... очень много букв, еще раз
               ) y
      from b
    

    - или как?
    В fb 2.0 вообще можно два поля из подзапроса вытянуть?
    8 окт 19, 03:35    [21988991]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    ёёёёё
    Member

    Откуда:
    Сообщений: 1306
    ёёёёё
    +
    Ivan_Pisarevsky
    Любители "*" должны страдать.

    А вот есть запрос
    select a, (
              select x from z
              ... много букв
              where ...
               ) x
      from b
    

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

    - нужно подзапрос фактически повторять:
    select a, (
              select x from z
              ... очень много букв
               ) x,
              (
              select y from z
              ... очень много букв, еще раз
               ) y
      from b
    

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


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

    select t1.a, t2.* 
      from b t1, (
              select x, y from z
              ... очень много букв
               ) t2 
    


    + Например

    select T1.RDB$SECURITY_CLASS a, T2.*
    from RDB$DATABASE T1, (select RDB$DESCRIPTION x, RDB$RELATION_ID y
                           from RDB$DATABASE) T2  
    

    Как тут без "*" ?
    8 окт 19, 03:46    [21988992]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    ёёёёё
    Member

    Откуда:
    Сообщений: 1306
    ёёёёё
    ...

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

    select t1.a, t2.* 
      from b t1, (
              select x, y from z
              ... очень много букв
               ) t2 
    

    ...

    - попробовал - оказывается, в таком варианте, в "подзапросе" t2 нельзя указывать ничего, относящееся не к контексту t1.
    Т.е., вот так - можно:
    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
    

    ...а вот так - уже нельзя:
    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 нашел... а у нас - не работает... :(
    8 окт 19, 04:30    [21988996]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 10079
    ёёёёё,

    и не должно. Ждём LATERAL
    8 окт 19, 07:01    [21989008]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    ёёёёё
    Member

    Откуда:
    Сообщений: 1306
    Симонов Денис,

    ну, почти все можно обыграть с момента появления execute block, но ведь хочется "чистым sql". :)
    8 окт 19, 07:22    [21989013]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    ёёёёё
    Member

    Откуда:
    Сообщений: 1306
    Симонов Денис
    ...Ждём LATERAL

    А это намечается? Даже в FB 4 нет...
    8 окт 19, 07:30    [21989016]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 10079
    ёёёёё,

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

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

    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
    )
    
    8 окт 19, 07:34    [21989021]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 10079
    ёёёёё,

    у ДЕ есть наработки по LATERAL и ранее этот тикет планировался на 4.0.
    Но сейчас сняли, не понятно будет это или отложат до 5.0.
    8 окт 19, 07:37    [21989024]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    KreatorXXI
    Member

    Откуда: Москва
    Сообщений: 819
    Симонов Денис
    ёёёёё,

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


    А я очень ждал . Реально полезная штука!
    8 окт 19, 10:04    [21989129]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    Симонов Денис
    Member

    Откуда: Рязань
    Сообщений: 10079
    KreatorXXI,

    спокойствие, это не официальное заявление разработчиков. Прояснить ситуацию могут разве что Дима или Влад.

    Я просто вижу по трекеру, что этот тикет снят с 4.0, но там вообще все тикеты с него сняты в Beta2. Я так понимаю что нужно стабилизировать и доделать, то что уже реализовано в 4.0. Если будут успевать, то может и сделают ещё.
    8 окт 19, 10:12    [21989134]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    WildSery
    Member

    Откуда: да, оттуда.
    Сообщений: 16962
    ёёёёё
    В fb 2.0 вообще можно два поля из подзапроса вытянуть?
    Обычно JOIN делается.
    Расслабились тут, понимаешь. В 1С вон до сих пор никаких подзапросов вообще нет.
    8 окт 19, 11:23    [21989204]     Ответить | Цитировать Сообщить модератору
     Re: derived table и "автоматические" заголовки столбцов  [new]
    KreatorXXI
    Member

    Откуда: Москва
    Сообщений: 819
    WildSery,

    1С в шоколаде. Наши работают по-моему через ADO. Как я им отдал запрос, так и пишут. Все экслюзивы ФБ3 работают.
    8 окт 19, 14:34    [21989463]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: 1 2      [все]
    Все форумы / Firebird, InterBase Ответить