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
- 身份证
- 名字
- 换档杆的数量
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 | 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)…那么您希望如何输出??