我试图解决以下sql问题:
我有一个ACTIONS
表,其中包含以下内容:
------------------------------------
| ACTIONS |
|----------------------------------|
| ID |
| GROUP_ID |
| TABLENAME |
| FEATURE_ID |
------------------------------------
一堆看起来像这样的表:
------------------------------------
| GRASS or SAND or ... |
|----------------------------------|
| FEATURE_ID |
| POSITION |
|+(more columns depending on table)|
------------------------------------
现在ACTIONS
。TABLENAME
指向某个表格(例如:GRASS
或SAND
或...
)
所有这些表都有一个名为position
我现在想查询ACTIONS
表中与各自POSITION
值相关的所有操作。
如何判断查询是否在正确的表中查找位置值?
感谢您指点我正确的方向!
最高
答案 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
........