powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Column unknown
23 сообщений из 23, страница 1 из 1
Column unknown
    #39555543
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Один и тот же запрос работает на 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
Column unknown
    #39555545
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
даже если я поставлю после = другое поле, например, A.ID_TYPE, то тоже ошибка:
Column unknown.
A.ID_TYPE.
...
Рейтинг: 0 / 0
Column unknown
    #39555546
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> At line 6, column 30.

В приведенном запросе всего 4 строки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Column unknown
    #39555549
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам, да то я просто экспериментировал.
Вот текст ошибки:
SQL error code = -206.
Column unknown.
A.ID_OPERATION.
At line 3, column 30.
...
Рейтинг: 0 / 0
Column unknown
    #39555550
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смесь явных и неявных join'ов. В fb3 такое запрещено
...
Рейтинг: 0 / 0
Column unknown
    #39555553
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неявный join - это когда нет left/inner/outer?
...
Рейтинг: 0 / 0
Column unknown
    #39555555
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Column unknown
    #39555556
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это в RN описано, кстати?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Column unknown
    #39555557
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно переделал?

Код: 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
Column unknown
    #39555559
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Column unknown
    #39555561
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему так правильней?
...
Рейтинг: 0 / 0
Column unknown
    #39555563
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11,

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

Процедуру в любом случае вперёд поставь, а
остальные можно райт-джойном или ещё как.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Column unknown
    #39555576
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понял, спасибо
...
Рейтинг: 0 / 0
Column unknown
    #39555598
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Column unknown
    #39555623
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Column unknown
    #39555624
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
...
Рейтинг: 0 / 0
Column unknown
    #39555625
Сисдба Мастеркеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Column unknown
    #39555627
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очевидно, наиболее частые/распространенные.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Column unknown
    #39555636
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

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

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


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