Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Select from select / 11 сообщений из 11, страница 1 из 1
10.10.2016, 11:30
    #39323641
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select from select
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
10.10.2016, 11:37
    #39323647
Naf
Naf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select from select
Код: sql
1.
where b.id_treb=id_treb.id_treb
...
Рейтинг: 0 / 0
10.10.2016, 11:40
    #39323651
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select from select
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
10.10.2016, 11:49
    #39323657
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select from select
KreatorXXI,

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

З.Ы. Я надеюсь это сильно упрощенный пример, потому как в этом случае DT тут на фиг не упёрся
...
Рейтинг: 0 / 0
10.10.2016, 12:14
    #39323669
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select from select
Симонов Денис,
С алиасом на таблицу, действительно, работает.
Код: 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
10.10.2016, 12:24
    #39323681
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select from select
Hello, Kreatorxxi!
You wrote on 10 октября 2016 г. 12:21:20:

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

дык алиас и не нужен если ты никуда кроме DT не обращаешься, а в этом случае и сама DT не нужна скорее всего. Я себе заимел привычку всегда давать алиас для DT, даже если без него можно обойтись. И вообще мне CTE больше нравятся. ИХМО запрос с ними нагляднее выглядит.
...
Рейтинг: 0 / 0
10.10.2016, 12:58
    #39323721
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select from select
Мимопроходящий,
Я формальности соблюл, алиас на поле поставил. Компилятор не заругался. Наверно, надо, чтобы ругался, например как "Column does not belong to referenced table".
...
Рейтинг: 0 / 0
10.10.2016, 13:05
    #39323732
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select from select
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
10.10.2016, 13:07
    #39323734
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select from select
KreatorXXIМимопроходящий,
Я формальности соблюл, алиас на поле поставил. Компилятор не заругался. Наверно, надо, чтобы ругался, например как "Column does not belong to referenced table".

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


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