Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Column unknown / 23 сообщений из 23, страница 1 из 1
18.11.2017, 18:28
    #39555543
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
Один и тот же запрос работает на FB 2.5.4 и выдает ошибку на FB 3.0.2

Код: sql
1.
2.
3.
4.
5.
  SELECT A.ID, O.NAME OPER_NAME, A.ID_OPERATION FROM APART A, PHONES P

  JOIN OPERATION O ON O.ID = A.ID_OPERATION
  INNER JOIN UNLIST(:PARAM1, ',') UL ON 1=1
  WHERE P.TEL = UL.ROW AND P.ID_APART = A.ID



ошибка:
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
A.ID_OPERATION.
At line 6, column 30.

Базу перенес как обычно: backup на FB 2.5, а потом restore на FB 3.

UNLIST - это процедура
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
SET TERM ^ ;

create or alter procedure UNLIST (
    STRING varchar(2048),
    SEPARATOR varchar(1))
returns (
    RES STRING24)
as
begin
  Separator = coalesce(Separator, ';');
  if (Separator = '') then Separator = ';';
  res = '';

  while (String != '') do
  begin
    if (substring(String from 1 for 1) != Separator) then
      res = res || substring(String from 1 for 1);
    else
    begin
      if (res != '') then suspend;
      res = '';
    end
    String = substring(String from 2);

  end
  if (res != '') then suspend;
end
^

SET TERM ; ^

/* Существующие привилегии на эту процедуру */

GRANT EXECUTE ON PROCEDURE UNLIST TO SYSDBA;



В процедурах UNLIST на FB 2.5 и FB 3 разница в том, что выходной параметр ROW переменовал на RES.



Эти два запроса выполняются без ошибок:
Код: sql
1.
2.
3.
4.
  SELECT A.ID, A.ID_OPERATION FROM APART A, PHONES P

  INNER JOIN UNLIST(:PARAM1, ',') UL ON 1=1
  WHERE P.TEL = UL.RES AND P.ID_APART = A.ID


Код: sql
1.
2.
SELECT A.ID, O.NAME OPER_NAME, A.ID_OPERATION FROM APART A
JOIN OPERATION O ON O.ID = A.ID_OPERATION



Таблицы APART и PHONES связаны внешним ключом apart.ID = phones.ID_APART
UNLIST превращает входную строку телефонов через запятую в таблицу, чтобы можно было соединить потом в запросе с phones



Поле ID_OPERATION конечно же есть, вот снимок со вкладки "скрипт":
...
Рейтинг: 0 / 0
18.11.2017, 18:36
    #39555545
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
даже если я поставлю после = другое поле, например, A.ID_TYPE, то тоже ошибка:
Column unknown.
A.ID_TYPE.
...
Рейтинг: 0 / 0
18.11.2017, 18:37
    #39555546
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
> At line 6, column 30.

В приведенном запросе всего 4 строки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.11.2017, 19:00
    #39555549
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
Гаджимурадов Рустам, да то я просто экспериментировал.
Вот текст ошибки:
SQL error code = -206.
Column unknown.
A.ID_OPERATION.
At line 3, column 30.
...
Рейтинг: 0 / 0
18.11.2017, 19:04
    #39555550
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
Смесь явных и неявных join'ов. В fb3 такое запрещено
...
Рейтинг: 0 / 0
18.11.2017, 19:11
    #39555553
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
Неявный join - это когда нет left/inner/outer?
...
Рейтинг: 0 / 0
18.11.2017, 19:25
    #39555555
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
Код: sql
1.
FROM APART A, PHONES P JOIN OPERATION O ON O.ID = A.ID_OPERATION


это на самом деле
Код: sql
1.
FROM APART A, (PHONES P JOIN OPERATION O ON O.ID = A.ID_OPERATION)


а ссылки из [неявной] derived table наружу запрещены по стандарту

Это единственное ограничение, в валидных вариантах смесь разнотипных джойнов вполне допустима.
...
Рейтинг: 0 / 0
18.11.2017, 19:27
    #39555556
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
А это в RN описано, кстати?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.11.2017, 19:28
    #39555557
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
Я правильно переделал?

Код: sql
1.
2.
3.
4.
5.
6.
SELECT A.ID, O.NAME OPER_NAME, A.ID_OPERATION FROM APART A

  LEFT JOIN PHONES P ON P.ID_APART = A.ID
  LEFT JOIN OPERATION O ON O.ID = A.ID_OPERATION
  INNER JOIN UNLIST(:PARAM1, ',') UL ON 1=1
  WHERE P.TEL = UL.RES
...
Рейтинг: 0 / 0
18.11.2017, 19:35
    #39555559
dimitr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
Код: sql
1.
2.
3.
4.
5.
SELECT A.ID, O.NAME OPER_NAME, A.ID_OPERATION
FROM UNLIST(:PARAM1, ',') UL
INNER JOIN PHONES P ON P.TEL = UL.RES
INNER JOIN APART A ON A.ID = P.ID_APART
INNER JOIN OPERATION O ON O.ID = A.ID_OPERATION
...
Рейтинг: 0 / 0
18.11.2017, 19:37
    #39555561
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
А почему так правильней?
...
Рейтинг: 0 / 0
18.11.2017, 19:55
    #39555563
Шавлюк Евгений
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
X11,

Потому что unlist не зависит от прочих таблиц в запросе.
...
Рейтинг: 0 / 0
18.11.2017, 20:01
    #39555564
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
INNER JOIN OPERATION нельзя, если у A.ID_OPERATION будет пустое значение, то запрос выдаст 0 записей.
...
Рейтинг: 0 / 0
18.11.2017, 20:02
    #39555566
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
Правильно будет LEFT JOIN OPERATION
...
Рейтинг: 0 / 0
18.11.2017, 20:28
    #39555572
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
X11> INNER JOIN OPERATION нельзя

Процедуру в любом случае вперёд поставь, а
остальные можно райт-джойном или ещё как.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.11.2017, 20:31
    #39555576
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
понял, спасибо
...
Рейтинг: 0 / 0
19.11.2017, 01:28
    #39555598
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
X11,

кстати, костыль ON 1=1 в 3.0 уже не нужен.
В общем, читаем
http://www.ibase.ru/files/firebird/Firebird3_SQL_features.pdf
начиная с 21й страницы, и можно прямо до 24ой, не останавливаясь.

p.s. документу 2 года, если что.
http://www.ibase.ru/develop/
...
Рейтинг: 0 / 0
19.11.2017, 10:02
    #39555623
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
kdv> кстати, костыль ON 1=1 в 3.0 уже не нужен. В общем, читаем
> http://www.ibase.ru/files/firebird/Firebird3_SQL_features.pdf
> начиная с 21й страницы, и можно прямо до 24ой, не останавливаясь.

Ну и где там про замену костыля?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.11.2017, 10:16
    #39555624
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
Спасибо!
...
Рейтинг: 0 / 0
19.11.2017, 10:23
    #39555625
Сисдба Мастеркеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
kdvX11,

кстати, костыль ON 1=1 в 3.0 уже не нужен.
В общем, читаем
http://www.ibase.ru/files/firebird/Firebird3_SQL_features.pdf
начиная с 21й страницы, и можно прямо до 24ой, не останавливаясь.

p.s. документу 2 года, если что.
http://www.ibase.ru/develop/
А что значит фраза "Некоторые наиболее стили смешивания" на 21 странице ?
...
Рейтинг: 0 / 0
19.11.2017, 10:49
    #39555627
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
Очевидно, наиболее частые/распространенные.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.11.2017, 11:16
    #39555636
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
Гаджимурадов Рустам,

ON TRUE. Мне кажется что kdv хотел сказать, что использование именно LEFT JOIN с хранимой процедурой теперь не обязательно, можно и INNER JOIN.
...
Рейтинг: 0 / 0
19.11.2017, 11:30
    #39555642
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Column unknown
Симонов Денис> ON TRUE. Мне кажется что kdv хотел сказать,
Симонов Денис> что использование именно LEFT JOIN с хранимой
Симонов Денис> процедурой теперь не обязательно, можно и INNER JOIN.

Да нет никакой разницы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Column unknown / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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