Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / CROSS APPLY в Firebird / 5 сообщений из 5, страница 1 из 1
18.09.2014, 14:04
    #38750419
lynatik50
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CROSS APPLY в Firebird
Здравствуйте, подскажите пожалуйста аналог 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
18.09.2014, 14:13
    #38750436
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CROSS APPLY в Firebird
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
18.09.2014, 14:17
    #38750445
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CROSS APPLY в Firebird
lynatik50Как в таблицу TABLE_PK добавить дополнительное поле, в котором через разделитель будут выводиться значения выбранного поля из таблицы TABLE_FK?LIST, JOIN, GROUP BY

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

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

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

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


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