MYSQL-запрос с использованием переменной в качестве имени таблицы в LEFT JOIN - PullRequest
12 голосов
/ 05 сентября 2010
SELECT var1,var2,var3,table_name 
FROM table1 LEFT JOIN table_name on var3=table_name.id

Значение Я хочу динамически покинуть таблицу соединения, в зависимости от значения table_name из table1, поскольку оттуда берется var3.

Но приведенный выше запрос приводит к

таблица table_name не существует

Моя ошибка ограничения mysql?

Ответы [ 2 ]

12 голосов
/ 05 сентября 2010

Имена таблиц, а также имена столбцов не могут быть динамическими в запросе SQL.Поэтому вы должны применять свою логику программно, используя 2 запроса или хранимую процедуру, см. Пример здесь: http://forums.mysql.com/read.php?98,126506,126598#msg-126598

0 голосов
/ 20 июля 2018

Другой способ - объединить все таблицы с помощью запроса на объединение :

SELECT *, 44 as table_origin FROM `Table_44`
UNION ALL
SELECT *, 58 as table_origin FROM `Table_58`;

Вы могли бы даже подготовить это как представление:

CREATE VIEW `AllTheTables` AS
SELECT *, 42 as table_origin FROM `Table_42`
UNION ALL
SELECT *, 44 as table_origin FROM `Table_44`
UNION ALL
SELECT *, 58 as table_origin FROM `Table_58`
UNION ALL
SELECT *, 69 as table_origin FROM `Table_69`;

И, таким образом, запросить его безопасно:

SELECT * FROM AllTheTables WHERE table_origin IN (44,58) AND something = 'foobar';
-- or --
SELECT * FROM AllTheTables WHERE table_origin = 42 AND something = 'the question';

В вашем конкретном случае это может выглядеть так:

SELECT var1, var2, var3, table_name 
FROM table1 LEFT JOIN AllTheTables ON table1.var3=AllTheTables.table_origin
...