powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ссылка на таблицу как результат выполнения условной операции
5 сообщений из 5, страница 1 из 1
Ссылка на таблицу как результат выполнения условной операции
    #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
Ссылка на таблицу как результат выполнения условной операции
    #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
Ссылка на таблицу как результат выполнения условной операции
    #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
Ссылка на таблицу как результат выполнения условной операции
    #39829304
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
COALESCE(b1.fld, b.fld, ...)
...
Рейтинг: 0 / 0
Ссылка на таблицу как результат выполнения условной операции
    #39829756
CntnC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо вам за помощь!
Всё получилось.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ссылка на таблицу как результат выполнения условной операции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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