我正在尝试从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端。
答案 0 :(得分:2)
这是不可能的,这听起来像你的模型有问题。
为什么不将shop_trades
和leisure_traces
放入同一个表格中,并在两个列之间区分?
答案 1 :(得分:2)
通常,这是由单个查询中的联合处理的。
规范化可以让您进入逻辑模型。这有助于更好地理解数据。在实现模型时,通常会进行非规范化。您在这里的子类型通常以两种方式实现:
如果相对很少访问子类型的额外列,则可以使用混合实现,其中公共列位于类型表中,并且部分或全部子类型列位于子类型表中。这对代码来说更复杂。
答案 2 :(得分:0)
如果可以的话,试试这个
SELECT trade
FROM (SELECT 'TABLE_NAME' FROM 'INFORMATION_SCHEMA'.'TABLES'
WHERE 'TABLE_SCHEMA'='*schema name*')
WHERE id='YYYY'
更新:
我认为上面的代码是不可能的。 :|