【发布时间】:2013-02-27 03:19:03
【问题描述】:
在以下情况下我遇到了一些麻烦: 我有一个创建两个临时表的查询,然后选择将它们连接在一起--
SELECT * FROM result
INNER JOIN result2 ON result2.packetDetailsId = result.packetDetailsId
然后我尝试通过连接一些结果字段来创建另一列,然后使用它来引用/查询另一个表。有没有办法在一个查询中完成这个?我应该离开临时表吗?
再次感谢您。
更新:如果我尝试为两个临时表的组合设置别名,我会收到一条错误消息,指出 [Err] 1060 - Duplicate column name 'packetDetailsId'
select * from (
SELECT * FROM result
INNER JOIN result2 ON result2.packetDetailsId = result.packetDetailsId) as myalias
另一个更新:我几乎让它作为一个查询工作,但我在我连接的列中得到结果“(BLOB)”:
select packet_details.packetDetailsId,products.productId,Credit,AccountNum,OrderStat, CONCAT(products.productId,Credit,'_',OrderStat) as consol from (
select packetDetailsId, GROUP_CONCAT(Credit) AS Credit, GROUP_CONCAT(AccountNum) AS AccountNum, GROUP_CONCAT(OrderStat) AS OrderStat FROM
( SELECT pd_extrafields.packetDetailsId,
CASE WHEN pd_extrafields.ex_title LIKE ('%Credit%')
THEN pd_extrafields.ex_value ELSE NULL END as Credit,
CASE WHEN pd_extrafields.ex_title LIKE ('%Account%')
THEN pd_extrafields.ex_value ELSE NULL END as AccountNum,
CASE WHEN pd_extrafields.ex_title LIKE ('%Existing%')
THEN pd_extrafields.ex_value ELSE NULL END as OrderStat
FROM pd_extrafields )AS TempTab GROUP BY packetDetailsId ) as alias2
INNER JOIN packet_details ON alias2.packetDetailsId = packet_details.packetDetailsId
INNER JOIN sales ON packet_details.packetDetailsId = sales.packetDetailsId
在 sales.saleId = sold_products.saleId 上的 INNER JOIN sold_products INNER JOIN products ON sold_products.productId = products.productId
【问题讨论】:
-
您可以在单个查询中完成,但是您对使用临时表有什么顾虑?这通常可以使复杂的查询更容易理解,甚至更有效地运行,因为它更容易让引擎理解并创建更好的执行计划。
-
你在哪里连接字段?在临时表的join查询中?
-
是的,Michael 使用临时表让生活变得更轻松。 Ravindra,我实际上是在组合两个查询(其中一个是您前几天帮助的),然后是另一个查询提取其他相关信息。当我组合这两个临时表时,它来自我想要连接字段的结果表。这有意义吗?
标签: mysql subquery temp-tables