在以下情况下我遇到了一些麻烦: 我有一个创建两个临时表的查询,以下选择将它们连接在一起 -
SELECT * FROM result
INNER JOIN result2 ON result2.packetDetailsId = result.packetDetailsId
然后我尝试通过连接一些结果字段来创建另一个列,然后使用它来引用/查询另一个表。有没有办法在一个查询中完成此操作?我应该离开温度表吗?
提前再次感谢你。
更新:如果我尝试对两个临时表的组合进行别名,我会收到一条错误消息,指出[Err] 1060 - 重复列名'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
INNER JOIN sold_products ON sales.saleId = sold_products.saleId INNER JOIN产品ON sold_products.productId = products.productId
答案 0 :(得分:2)
如果我理解正确,您已经创建了临时表,并且需要使用from ... inner join ...
您唯一可能的限制是您只能在from
子句中引用一次的临时表格;除此之外,没有其他限制(我经常使用临时表作为创建最终结果的中间步骤。)
假设你的临时表是temp_result1
和temp_result2
。两个表都有一个字段packedDetailsId
,将在其上执行连接。记得在每个表上创建适当的索引;至少你需要在两个表上索引packedDetailsId
:
alter table temp_result1
add index PDI(packedDetailsId);
alter table temp_result2
add index PDI(packedDetailsId);
现在,只需执行具有所需连接和连接的查询。如果concat
返回BLOB
,则将结果转换为char
(当然,我假设您需要一个文本字符串):
select r1.*, r2.*, cast(concat(r1.field1, ',', r2.field2) as char) as data_concat
from temp_result1 as r1
inner join temp_result2 as r2 on r1.packedDetailsId = r2.packedDetailsId;
我发现你的问题是GROUP_CONCAT
正在返回BLOB
值...这是正常的(MySQL不知道先验如何返回值,所以它返回二进制数据);只需使用cast
功能。
希望这有助于你
答案 1 :(得分:0)
因此,如果result2和result都是临时表,则必须包含#if本地临时表和##如果全局临时表
所以你的陈述应该是:
SELECT * FROM #result
INNER JOIN #result2 ON #result2.packetDetailsId = #result.packetDetailsId
我的坏。这仅适用于MS SQL