MySql - 在一个查询中使用动态表名

时间:2015-10-03 07:34:37

标签: mysql

我有以下表格:

汽车

  • ID
  • 名称
  • 颜色

自行车

  • ID
  • 名称
  • number_of_gearshift

我需要在我的mysql数据库中使用这个表的中央索引表,并为它们提供唯一的id。像这样:

  • ID
  • 表名

可以说,items-table中的id与相应表中的id相同:

id | table_name
 1 | cars
 2 | cars
 3 | bicycles
 4 | cars

汽车

id | name        | color
 1 | Peugeot     | red
 2 | BMW         | green  
 4 | Nissan      | blue

自行车

id | name      | number_of_gearshift
 3 | Stevens   | 24

我的问题 - 以下情况: 我有一个项目的ID(例如XXX)。现在我想通过一个查询获取此项的数据。像这样的东西(我知道,这不会起作用):

SELECT table2.*
FROM (SELECT table_name FROM items WHERE id = XXX) AS table2

有可能吗?

1 个答案:

答案 0 :(得分:1)

使用可以使用动态sql查询来实现此目的。

set @query = null;
set @id = 3;/*change according to requirement*/
SET @tn := (select `table_name` from items where id =  @id);

set @query = concat('select * from ',@tn,' where id = ',@id);

prepare stmt from @query;
execute stmt;
deallocate prepare stmt;

根据您的要求更改@id的值。

SQL Fiddle