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

MySql-在一个查询中使用动态表名,mysql,Mysql,我有以下表格: 汽车 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 |

我有以下表格:

汽车

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 | 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
  • 身份证
  • 名字
  • 换档杆的数量
我需要mysql数据库中这些表的中心索引表和它们的唯一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
  • 身份证
  • 表名称
比方说,items表中的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 | 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 | 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)。现在我只想通过一次查询来获取此项的数据。像这样的事情(我知道,那是行不通的):


有可能吗?

Use可以使用动态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
的值


请添加您的预期输出,以便更清晰。预期输出是表2的数据,取决于表本身。因此,如果XXX=1,则输出为:“1,标致,红色”。如果XXX=3,则输出为“3,Stevens,24”。我将使用不同的表结构,从头开始组合这两个表。唯一的区别是换档的颜色/数字,因此默认情况下将这两列设为空,如果是汽车,则为第一列设置一个值,如果是自行车,则为第二列设置一个值。您也可以添加一个类型列(bike/car),但这完全不是必需的。这只是一个示例。在野外,表格有更多的列(例如门的数量、安全气囊的数量等),还有更多的表格,如摩托车、船只、卡车等,有不同的列。我不能将它们组合起来,因为每个记录都有大量的空值列,甚至有些列具有相同的名称,但数据类型不同(例如,一个bicile的重量为1000kg,不需要小数,所以我们可以使用SmallintOh。对不起,问题还没有回答。我需要一个查询来获取所有行,而不仅仅是一个特定行(@id)…那么您希望如何输出??