powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / CROSS APPLY в Firebird
5 сообщений из 5, страница 1 из 1
CROSS APPLY в Firebird
    #38750419
lynatik50
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, подскажите пожалуйста аналог CROSS APPLY в Firebird.

Есть основная таблица TABLE_PK и связанная с ней TABLE_FK (связь один ко многим).

Как в таблицу TABLE_PK добавить дополнительное поле, в котором через разделитель будут выводиться значения выбранного поля из таблицы TABLE_FK?

В MS SQL это реализуется так:

SELECT tp.ID, tp.NAME, tk.NAMES
FROM TABLE_PK tp
CROSS APPLY (
SELECT e.[Name] + ', '
FROM TABLE_FK tk
WHERE tp.ID=tk.TABLE_PK_ID FOR XML PATH('')) AS tk([NAMES])
...
Рейтинг: 0 / 0
CROSS APPLY в Firebird
    #38750436
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lynatik50В MS SQL это реализуется так:

Код: plaintext
1.
2.
3.
4.
5.
SELECT tp.ID, tp.NAME, tk.NAMES
FROM TABLE_PK tp
CROSS APPLY (
    SELECT   e. [Name] + ', '
    FROM TABLE_FK tk
    WHERE tp.ID=tk.TABLE_PK_ID FOR XML PATH('')) AS tk([NAMES])
Для данного примера можно так:
Код: sql
1.
2.
3.
select p.id, p.name, list( f.name )
from tp p join tk f on p.id = f.pid
group by p.id, p.name;


Или вот эдак (если из подчинённой таблицы надо только одно поле вытащить, пусть и собранное в список):
Код: sql
1.
2.
select p.id, p.name, ( select list(f.name) from tk f where f.pid = p.id)
from tp p;


Но как такового cross apply в ФБ - нету. И это печалит, кстати, ибо полезная штука.

PS. Откудова взялся алиас 'e.' в вашем примере ?
...
Рейтинг: 0 / 0
CROSS APPLY в Firebird
    #38750445
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lynatik50Как в таблицу TABLE_PK добавить дополнительное поле, в котором через разделитель будут выводиться значения выбранного поля из таблицы TABLE_FK?LIST, JOIN, GROUP BY

lynatik50В MS SQL это реализуется так:Нет, это не даст то, что ты выше хочешь.

PS CROSS APPLY отличается от INNER JOIN только тем, что позволяет в правой части кореллированный подзапрос, т.е. разрешает ссылаться на внешние таблицы.
Это не есть необходимое требование в случае, описанном выше.
...
Рейтинг: 0 / 0
CROSS APPLY в Firebird
    #38750459
lynatik50
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

Большое спасибо, все работает!

PS. С алиасом ошибочка вышла, опечатался
...
Рейтинг: 0 / 0
CROSS APPLY в Firebird
    #38751217
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати в стандарте CROSS APPLY нету, но есть LATERAL JOIN (это тоже самое насколько я понял). И это уже есть в трекере CORE-3435
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / CROSS APPLY в Firebird
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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