MySQL使用子查询获取表名?

时间:2010-10-18 15:02:32

标签: mysql

我正在尝试从MySQL数据库中选择一些数据。

我有一个包含业务详细信息的表,以及一个包含交易列表的单独表。因为我们有多个交易

business_details

id | business_name | trade_id | package_id
1  | Happy News    |    12    |    1

这是主表,包含商家名称,商品ID和包ID

shop_trades

id | trade
1  | newsagents

这包含业务的交易类型

configuration_packages

id | name_of_trade_table
1  | shop_trades
2  | leisure_trades

这包含要查看的交易表的名称

所以,基本上,如果我想找到交易类型(例如,报刊经销商,快餐等),我会查看XXXX_trades表。但我首先需要从configuration_packages表中查找XXXX的名称。

我通常做的是2个SQL查询:

SELECT business_details.*, configuration_packages.name_of_trade_table
FROM business_details, configuration_packages
WHERE business_details.package_id = configuration_packages.id
AND business_details.id = '1'

这给了我数据库表的名称来查找商品名,所以我查找表的名称

SELECT trade FROM XXXX WHERE id='YYYY'

其中XXXX是作为第一个查询的一部分返回的表的名称,YYYY是包的id,再次从第一个查询返回。

有没有办法合并这两个查询,以便我只运行一个?

之前我使用过子查询,但只在查询的SELECT端使用 - 而不是FROM端。

3 个答案:

答案 0 :(得分:2)

这是不可能的,这听起来像你的模型有问题。

为什么不将shop_tradesleisure_traces放入同一个表格中,并在两个列之间区分?

答案 1 :(得分:2)

通常,这是由单个查询中的联合处理的。

规范化可以让您进入逻辑模型。这有助于更好地理解数据。在实现模型时,通常会进行非规范化。您在这里的子类型通常以两种方式实现:

  • 按原样分隔表格,这使得检索变得困难。这会导致您提出有关如何检索数据的问题。
  • 具有子类型指示符的所有子类型的公用表。这可能导致列对于某些子类型始终为空。它简化了数据访问,并可能改变代码中处理子类型的方式。

如果相对很少访问子类型的额外列,则可以使用混合实现,其中公共列位于类型表中,并且部分或全部子类型列位于子类型表中。这对代码来说更复杂。

答案 2 :(得分:0)

如果可以的话,试试这个

SELECT trade
FROM (SELECT 'TABLE_NAME' FROM 'INFORMATION_SCHEMA'.'TABLES' 
      WHERE 'TABLE_SCHEMA'='*schema name*')
WHERE id='YYYY'

更新:

我认为上面的代码是不可能的。 :|