首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将此查询从MySQL转换为PostgreSQL:

如何将此查询从MySQL转换为PostgreSQL:
EN

Stack Overflow用户
提问于 2022-08-18 04:14:30
回答 1查看 62关注 0票数 -1

我对这一转变感到震惊

MYSQL

代码语言:javascript
复制
IF((select SUM(MT2.TOTAL) from U_001_01_MMTRANS MT2 where MT2.CMPGLINEREF!=0 AND MT2.MAINLINEREF 
IN (select MT3.LOGICALREF from U_001_01_MMTRANS MT3 where MT3.ITEMREF=ITM.LOGICALREF AND MT3.LINETYPE=0 AND MT3.INVOICEREF=INV.LOGICALREF)) IS NULL, 0.00, 
(select SUM(MT2.TOTAL) from U_001_01_MMTRANS MT2 where MT2.CMPGLINEREF!=0 AND MT2.MAINLINEREF 
IN (select MT3.LOGICALREF from U_001_01_MMTRANS MT3 where MT3.ITEMREF=ITM.LOGICALREF AND MT3.LINETYPE=0 AND MT3.INVOICEREF=INV.LOGICALREF))) AS TRAONV

我曾试图这样做,但没有被接受:

PostgreSQL

代码语言:javascript
复制
CASE when 
(select SUM(MT4.TOTAL) from U_002_01_MMTRANS MT4
where MT4.CMPGLINEREF!=0 AND MT4.MAINLINEREF 
IN (select MT5.LOGICALREF from U_002_01_MMTRANS MT5 where MT5.ITEMREF=ITM.LOGICALREF 
AND MT5.LINETYPE=0 AND MT5.INVOICEREF=INV.LOGICALREF)) IS NULL then 0.00
else 
(select SUM(MT4.TOTAL) from U_002_01_MMTRANS MT4 where MT4.CMPGLINEREF !=0 AND MT4.MAINLINEREF
IN (select MT5.LOGICALREF from U_002_01_MMTRANS MT5 where MT5.ITEMREF=ITM.LOGICALREF AND MT5.LINETYPE=0 
AND MT5.INVOICEREF=INV.LOGICALREF)) end as TRAONV

有谁可以帮我?

EN

回答 1

Stack Overflow用户

发布于 2022-08-18 05:00:08

MySQL查询效率低得离谱,因为您重复两次相同的查询以获得单个结果。

在PostgreSQL中,您可以使用coalesce()函数返回列表中的第一个非空元素,如下所示:

代码语言:javascript
复制
select coalesce(SUM(TOTAL), 0.00) as TRAONV
from U_001_01_MMTRANS
where CMPGLINEREF <> 0 
  and MAINLINEREF IN (
    select MT3.LOGICALREF
    from U_001_01_MMTRANS MT3
    join ITM on MT3.ITEMREF = ITM.LOGICALREF    -- check these joins
    join INV on MT3.INVOICEREF = INV.LOGICALREF -- possibly other conditions
    where MT3.LINETYPE = 0                      -- or WHERE clauses necessary
    )

由于您的查询没有完成,这不过是最大的努力。

我希望这也清楚地说明了正确格式化查询的价值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73397383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档