gpt4 book ai didi

Mysql,使用子查询或临时表组合和查询结果

转载 作者:行者123 更新时间:2023-11-29 06:51:10 26 4
gpt4 key购买 nike

我在以下情况下遇到了一些麻烦:我有一个创建两个临时表的查询,下面的选择将它们连接在一起--

    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.saleIdINNER JOIN products ON sold_products.productId = products.productId

最佳答案

如果我理解正确的话,您已经创建了临时表,您需要使用 from ... inner join ... 来“连接”结果

唯一可能的限制是您只能在from 子句中引用您的临时表一次;除此之外,没有其他限制(我经常使用临时表作为创建最终结果的中间步骤)。


提示

假设您的临时表是 temp_result1temp_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 函数即可。

希望对你有帮助

关于Mysql,使用子查询或临时表组合和查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com