MYSQL变量表名来自value

时间:2014-11-17 10:11:59

标签: mysql syntax

我试图解决以下sql问题:

我有一个ACTIONS表,其中包含以下内容:

------------------------------------
|             ACTIONS              |
|----------------------------------|
|                ID                |
|             GROUP_ID             |
|             TABLENAME            |
|             FEATURE_ID           |
------------------------------------

一堆看起来像这样的表:

------------------------------------
|       GRASS or SAND  or ...      |
|----------------------------------|
|            FEATURE_ID            |
|             POSITION             |
|+(more columns depending on table)|
------------------------------------

现在ACTIONSTABLENAME指向某个表格(例如:GRASSSAND...

所有这些表都有一个名为position

的列

我现在想查询ACTIONS表中与各自POSITION值相关的所有操作。 如何判断查询是否在正确的表中查找位置值?

感谢您指点我正确的方向!

最高

2 个答案:

答案 0 :(得分:0)

您可以使用CONCAT& PREPARE用于实现您的要求

检查一下:MySQL Prepare (搜索'如何选择在运行时执行查询的表,将表的名称存储为用户变量')

mysql> USE test;
mysql> CREATE TABLE t1 (a INT NOT NULL);
mysql> INSERT INTO t1 VALUES (4), (8), (11), (32), (80);

mysql> SET @table = 't1';
mysql> SET @s = CONCAT('SELECT * FROM ', @table);

mysql> PREPARE stmt3 FROM @s;
mysql> EXECUTE stmt3;
+----+
| a  |
+----+
|  4 |
|  8 |
| 11 |
| 32 |
| 80 |
+----+

mysql> DEALLOCATE PREPARE stmt3;

答案 1 :(得分:0)

你不能直接这样做,因为Mysql不支持加入变量表名。

如果您知道要加入特定的链接表,或者建立一个带有一个子查询的联合查询,则2个解决方案是动态生成SQL(在脚本语言或sql过程中)表

SELECT actions.id, actions.group_id, actions.tablename, actions.feature_id, grass.position
FROM actions
INNER JOIN grass
ON actions.feature_id = grass.feature_id
WHERE actions.tablename = 'grass'
UNION
SELECT actions.id, actions.group_id, actions.tablename, actions.feature_id, sand.position
FROM actions
INNER JOIN sand
ON actions.feature_id = sand.feature_id
WHERE actions.tablename = 'sand'
UNION
........