powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Select from select
11 сообщений из 11, страница 1 из 1
Select from select
    #39323641
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FB 3.0.1. Есть запрос (всё что мог обрезал, важен только принцип):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select id_treb,
       ( select b.id_treb
         from trebov b
         where b.id_treb=id_treb
       )
from (
       select a.id_treb
       from trebov a
       where a.id_treb in (7402914,7402915,7402916,7402917)
     ) (id_treb)


В подзапросе
Код: sql
1.
2.
3.
4.
( select b.id_treb
  from trebov b
  where b.id_treb=id_treb
)


выскакивает ошибка "multiple rows in singleton select", хотя id_treb - первичный ключ.
Вот такой запрос ошибки не даёт:
Код: sql
1.
2.
3.
4.
5.
6.
7.
select t.id_treb,  b.id_treb
from (
       select a.id_treb
       from trebov a
       where a.id_treb in (7402914,7402915,7402916,7402917)
     ) t (id_treb)
     inner join trebov b on b.id_treb=t.id_treb


Но я хочу понять, что в первом запросе не так, чтобы больше не использовать такую конструкцию. Не вижу ошибки.
...
Рейтинг: 0 / 0
Select from select
    #39323647
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
where b.id_treb=id_treb.id_treb
...
Рейтинг: 0 / 0
Select from select
    #39323651
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

Думаю что
Код: sql
1.
2.
3.
4.
( select b.id_treb
  from trebov b
  where b.id_treb=id_treb
)


воспринимается как
Код: sql
1.
2.
3.
4.
( select b.id_treb
  from trebov b
  where b.id_treb=b.id_treb
)


а не как ты ожидал
...
Рейтинг: 0 / 0
Select from select
    #39323657
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

1. derived table всегда надо давать алиас, что не сделано
2. а затем использовать этот алиас в подзапросе

З.Ы. Я надеюсь это сильно упрощенный пример, потому как в этом случае DT тут на фиг не упёрся
...
Рейтинг: 0 / 0
Select from select
    #39323669
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,
С алиасом на таблицу, действительно, работает.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select t.id_treb,
       ( select b.id_treb
         from trebov b
         where b.id_treb=t.id_treb
       )
from (
       select a.id_treb
       from trebov a
       where a.id_treb in (7402914,7402915,7402916,7402917)
     ) t (id_treb)


Но хочу заметить, что в руководстве по языку про алиас таблицы жёсткого требования нет. И даже примеры без алиасов. Значит, зарублю на носу это требование. Что и хотел понять. Спасибо.
А запрос, конечно, не реальный.
...
Рейтинг: 0 / 0
Select from select
    #39323681
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kreatorxxi!
You wrote on 10 октября 2016 г. 12:21:20:

Kreatorxxi> в руководстве по языку про алиас таблицы жёсткого требования нет.
есть рекомендации "от лучших собаководов" (С)
так вот, если ты хоть для одной таблицы применил алиас, то просто таки обязан,
как порядочный человек жен применять алиасы для всех объектов в запросе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Select from select
    #39323682
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,

дык алиас и не нужен если ты никуда кроме DT не обращаешься, а в этом случае и сама DT не нужна скорее всего. Я себе заимел привычку всегда давать алиас для DT, даже если без него можно обойтись. И вообще мне CTE больше нравятся. ИХМО запрос с ними нагляднее выглядит.
...
Рейтинг: 0 / 0
Select from select
    #39323721
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,
Я формальности соблюл, алиас на поле поставил. Компилятор не заругался. Наверно, надо, чтобы ругался, например как "Column does not belong to referenced table".
...
Рейтинг: 0 / 0
Select from select
    #39323732
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Kreatorxxi!
You wrote on 10 октября 2016 г. 13:03:28:

Kreatorxxi> Наверно, надо, чтобы ругался, например как "Column does not belong to referenced table".
дык это если б у тебя такого поля не было, а так у тебя нашлось оное в таблице, его парсер и зацепил.

зы: я предпочитаю не напрягать парсер излишними размышлениями о том, откуда чего ему брать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Select from select
    #39323734
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIМимопроходящий,
Я формальности соблюл, алиас на поле поставил. Компилятор не заругался. Наверно, надо, чтобы ругался, например как "Column does not belong to referenced table".

если честно я удивлён, что можно дать алиас полю DT при этом не задавая алиас самой DT.
...
Рейтинг: 0 / 0
Select from select
    #39323738
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не прав. Надо аккуратнее быть с названиями полей, алиасов ...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Select from select
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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