powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / О подзапросах
5 сообщений из 5, страница 1 из 1
О подзапросах
    #38571969
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую,
подскажите пожалуйста, в Firebird работает такая вещь, которая вот здесь у Грубера
http://www.sql.ru/docs/sql/u_sql/ch11.shtml
называется "соотнесенный подзапрос". У меня на такого рода запрос IBExpert отвечает Column does not belong to referenced table и указывает на строчку в подзапросе, где я ссылаюсь на поле из внешнего запроса. И тот же запрос не выполняется в Дельфи (думал, может что-то в IBExpert).

Может, конечно, у меня запрос просто неправильно составлен, вот он (есть подозрение, что можно как-то сильно проще).

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select em1.element_id, em1.manufacturer_id, min_manuf.first_manuf
from elementstomanufacturer em1
inner join
(select em2.manufacturer_id, min(m.name) as first_manuf
from elementstomanufacturer em2
inner join manufacturers m
on em2.manufacturer_id = m.id
where em2.element_id=em1.element_id) min_manuf
on em1.element_id = min_manuf.element_id



Таблицы "элементы-производители" и "производители". Вот, убрал часть неактуальных в задаче полей.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE ELEMENTSTOMANUFACTURER (
    ELEMENT_ID       INTEGER NOT NULL,
    MANUFACTURER_ID  INTEGER NOT NULL,
    ELT_MANUF_NAME   VARCHAR(250),
    ELT_MANUF_CODE   VARCHAR(250),
);


CREATE TABLE MANUFACTURERS (
    ID       INTEGER NOT NULL,
    NAME     VARCHAR(50),
    COMMENT  VARCHAR(100)
);


У каждого элемента может быть несколько производителей. Хочу получить результат типа element_id, manufacturer_id, manufacturer_name - эелемент и 1 его производитель с первым по алфавиту именем. В рабочей задаче потом постановка изменилась, ввел "основного" производителя, но вот над этой, теперь уже просто отвлеченной задачей, голову сломал, не могу получить, чего хочу. ((
...
Рейтинг: 0 / 0
О подзапросах
    #38571995
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,

есть в FB >= 2.0

у тебя в подзапросе min_manuf нет поля element_id

начиная с FB 2.1 есть ещё и CTE
...
Рейтинг: 0 / 0
О подзапросах
    #38572014
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,

блин да ещё и составлен не верно. В Devired Tables нельзя писать ссылки на внешние таблицы. Должно быть что-то вроде

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
WITH MIN_MANUF AS (
  SELECT
    EM2.ELEMENT_ID AS ELEMENT_ID,
    MIN(M.NAME) AS FIRST_MANUF
  FROM ELEMENTSTOMANUFACTURER EM2
  INNER JOIN MANUFACTURERS M ON EM2.MANUFACTURER_ID = M.ID
  GROUP BY EM2.ELEMENT_ID
)
SELECT
    EM1.ELEMENT_ID,
    EM1.MANUFACTURER_ID,
    MIN_MANUF.FIRST_MANUF
FROM ELEMENTSTOMANUFACTURER EM1
INNER JOIN MIN_MANUF ON EM1.ELEMENT_ID = MIN_MANUF.ELEMENT_ID



P.S. Это пример того как использовать. А задачу ты решаешь не правильно
...
Рейтинг: 0 / 0
О подзапросах
    #38572030
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисs62,
у тебя в подзапросе min_manuf нет поля element_id
Да. Да я за несколько дней разные запросы пробовал, сейчас составил с ошибкой.
Спасибо за ответы, после работы поразбираюсь.
автор В Devired Tables нельзя писать ссылки на внешние таблицыА у Грубера пример с ссылкой на внешнюю таблицу.
...
Рейтинг: 0 / 0
О подзапросах
    #38572033
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,

ты путаешь. У него там просто подзапрос и он не участвует в JOIN. Насколько я знаю есть случаи когда можно JOINить со ссылкой на внешюю таблицу, но это только для LATERAL соединений, такие в FB не поддерживаются.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / О подзапросах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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