На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! информация о разделе
user posted imageДанный раздел предназначается исключительно для обсуждения вопросов использования языка запросов SQL. Обсуждение общих вопросов, связанных с тематикой баз данных - обсуждаем в разделе "Базы данных: общие вопросы". Убедительная просьба - соблюдать "Правила форума" и не пренебрегать "Правильным оформлением своих тем". Прежде, чем создавать тему, имеет смысл заглянуть в раздел "Базы данных: FAQ", возможно там уже есть ответ.

Модераторы: Akina
  
> [Firebird] В запросе не определяется поле , Рекурсивный запрос не разруливает поле
    Привет. У меня есть иерархическая таблица XXXX. Пытаюсь для нода определить парентов и чайлдов, чтобы произвести вставку в другую таблицу. Однако Firebird 2.1 ругается на:

    Column does not belong to referenced table.
    Dynamic SQL Error.
    SQL error code = -206.
    Column unknown.
    C.ID.
    At line 8, column 46.

    Сам текст запроса: поля есть. Если поменять куски CHILDREN и PARENT_LIST местами, то будет ругаться на то, что нет PT.ID. В чем может быть проблема?

    ExpandedWrap disabled
      MERGE INTO MO_DATAGROUP_LINK DGL USING
      (
      WITH RECURSIVE
      CHILDREN AS (
      SELECT 923 ID FROM RDB$DATABASE
      UNION ALL
      SELECT S.ID FROM SPRT S JOIN CHILDREN C ON C.ID = S.PARENTID
      ),
      PARENT_LIST AS (
        SELECT PARENTID ID FROM SPRT WHERE ID = 923
        UNION ALL
        SELECT PARENTID ID FROM SPRT T JOIN PARENT_LIST PT ON T.ID = PT.ID)
      SELECT ID FROM PARENT_LIST WHERE ID IS NOT NULL
      UNION ALL
      SELECT ID FROM CHILDREN
      ) PX ON DGL.DATAID = PX.ID AND DGL.DATAGROUPID = 896 AND DGL.TABLENAME = 'XXXX'
      WHEN NOT MATCHED THEN INSERT (DATAGROUPID, TABLENAME, DATAID) VALUES (:D_VALUE, 'XXXX', PX.ID);
      А где у тебя таблица C? ;)
        Romkin, "JOIN CHILDREN C ON", не?
          Присоедини псевдоним ко всем полям, оно путается скорее всего
            Если присоединять сюда "SELECT S.ID FROM SPRT S JOIN CHILDREN C ON C.ID = S.PARENTID" по аналогии с выборкой PARENT_LIST, то толку никакого, к сожалению, та же ошибка. Кстати, если поменять местами блоки CHILDREN и PARENT_LIST как есть, то будет уже ругаться на выборку PARENT_LIST аналогично.
              простите, а это что без запятой пишется?
              ExpandedWrap disabled
                SELECT PARENTID ID FROM
                Игорь Акопян, а почему оно должно писаться с запятой?

                Добавлено
                Я не понимаю, господа, вы теоретически пытаетесь что-то понять и найти синтаксические ошибки? Не проще ли к себе в IBExpert или FlameRobin скопировать запрос и проверить?
                Структура таблиц тривиальна:
                SPRT (ID - int PK, PARENTID - int FK to SPRT)
                MO_DATAGROUP_LINK (ID - int PK, DATAGROUPID - int, TABLENAME - varchar, DATAID - int)
                Причем достаточно двух таблиц, т.к. MO_DATAGROUP_LINK.DATAID - это ссылка на SPRT.ID без FK (там FK не нужен по архитектурным причинам).
                  Думаю что проще(или даже НАДО) в хр.процедуре сделать,особенно если там рекурсия.(Разбираться с твоим запросом лень) Я когда-то писал хр.процедуру (с запросом выходил большой гемор-я решил,что это невозможно сделать,хотя может и не так-не претендую на истину в последней инстанции),в которой определял верхнего парента,всех чайдлов,если не ошибаюсь.(давно было,но процедуру найти,думаю, можно) Похоже и тебе что-то аналогичное надо?
                  Сообщение отредактировано: Alex2011 -
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0355 ]   [ 15 queries used ]   [ Generated: 14.11.25, 07:51 GMT ]