在LEFT JOIN中使用变量作为表名的MYSQL查询

时间:2010-09-05 14:34:03

标签: mysql left-join

SELECT var1,var2,var3,table_name 
FROM table1 LEFT JOIN table_name on var3=table_name.id

含义我希望动态地离开连接表,具体取决于table_nametable1的值,因为var3取自{{1}}。

但上述查询结果为

  

表table_name不存在

我的mysql限制错误?

2 个答案:

答案 0 :(得分:12)

表名和列名在SQL查询中不能是动态的。因此,您必须以编程方式,使用2个查询或存储过程来应用逻辑,请参阅此处的示例:http://forums.mysql.com/read.php?98,126506,126598#msg-126598

答案 1 :(得分:0)

另一种方法是将所有表与一个union query结合起来:

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
相关问题