Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ссылка на таблицу как результат выполнения условной операции / 5 сообщений из 5, страница 1 из 1
19.06.2019, 20:34
    #39828561
CntnC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ссылка на таблицу как результат выполнения условной операции
Доброго времени суток!

Создавая запрос, наткнулся на такую проблему: формируя выборку, необходимо было к таблице tbl_a присоединить одну из таблиц tbl_b_1, tbl_b_2 или tbl_b_3 в зависимости от значения, хранящегося в поле num_tbl таблицы tbl_a.

В упрощённом виде запрос имел следующий вид:
Код: sql
1.
2.
SELECT id, name, tbl.id, tbl.name FROM tbl_a
INNER JOIN (SELECT CASE tbl_a.num_tbl WHEN 1 THEN 'tbl_b_1' WHEN 2 THEN 'tbl_b_2' WHEN 3 THEN 'tbl_b_3' END) tbl ON tbl_a.id_tbl = tbl.id


Однако, получается, что наименования таблиц не являются ссылками на них, и закономерно появляется сообщение об ошибке.

Как быть в такой ситуации?

Таблицы tbl_b_1, tbl_b_2, tbl_b_3 имеют схожее строение и иерархически связаны друг с другом внешними ключами между полями id и parent_id.

Могу привести упрощённый запрос, где та же проблема:
Код: sql
1.
SELECT id FROM (SELECT IF(1=1,'tbl_a',''))
...
Рейтинг: 0 / 0
21.06.2019, 10:38
    #39829077
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ссылка на таблицу как результат выполнения условной операции
FROM a
LEFT JOIN b1 ON a.n=1 AND a.b_id=b1.id
LEFT JOIN b2 ON a.n=2 AND a.b_id=b2.id
...
...
Рейтинг: 0 / 0
21.06.2019, 13:30
    #39829189
CntnC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ссылка на таблицу как результат выполнения условной операции
Спасибо за помощь!

Попробовал реализовать: каждая запись таблицы a объединяется с записью из нужной таблице b.

Загвоздка появилась, когда мне нужно было определить поля образуемые при объединении таблиц:
Код: sql
1.
2.
3.
SELECT id, (SELECT CASE a.n WHEN 1 THEN b1.id WHEN 2 THEN b2.id END) FROM a
LEFT JOIN b1 ON a.n =1 AND a.b_id=b1.id
LEFT JOIN b2 ON a.n =2 AND a.b_id=b2.id


Результатом выполнения запроса является столбец с отсутствующим наименованием и пустым содержимым. Получается, что нельзя в данном случае применить оператор выбора CASE для различных присоединяемых таблиц.

А можно ли использовать динамический запрос, чтобы в INNER SELECT использовались IF или CASE для получения указателя на нужную таблицу?
...
Рейтинг: 0 / 0
21.06.2019, 16:44
    #39829304
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ссылка на таблицу как результат выполнения условной операции
COALESCE(b1.fld, b.fld, ...)
...
Рейтинг: 0 / 0
24.06.2019, 10:50
    #39829756
CntnC
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ссылка на таблицу как результат выполнения условной операции
Спасибо вам за помощь!
Всё получилось.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ссылка на таблицу как результат выполнения условной операции / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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