You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求将含{oj}的SQL查询转换为标准JOIN语法

将含{oj}语法的SQL转换为标准JOIN语法

原始SQL(带{oj}语法)

SELECT
...
FROM
 {oj (((((((((("VMPH" "VMPH" LEFT OUTER JOIN "VMPT" "VMPT" ON "VMPH"."NMPSTID"="VMPT"."NMPSTID")
 LEFT OUTER JOIN "ARRTA" "ARRTA" ON "VMPH"."TXTERM"="ARRTA"."CODETERM")
 LEFT OUTER JOIN "VMAGRE" "VMAGRE" ON "VMPH"."NMAGRE"="VMAGRE"."NMDOCID")
 LEFT OUTER JOIN "VMDH" "VMDH" ON "VMPH"."NMDOCID"="VMDH"."NMDOCID")
 LEFT OUTER JOIN "VMPTIT" "VMPTIT" ON ("VMPT"."NMPSTID"="VMPTIT"."NMPSTID") AND ("VMPT"."WDTRANNUM"="VMPTIT"."WDTRANNUM"))
 LEFT OUTER JOIN "VMPTSV" "VMPTSV" ON ("VMPT"."NMPSTID"="VMPTSV"."NMPSTID") AND ("VMPT"."WDTRANNUM"="VMPTSV"."WDTRANNUM"))
 LEFT OUTER JOIN "VMPTEQ" "VMPTEQ" ON ("VMPT"."NMPSTID"="VMPTEQ"."NMPSTID") AND ("VMPT"."WDTRANNUM"="VMPTEQ"."WDTRANNUM"))
 LEFT OUTER JOIN "VMDTEQ" "VMDTEQ" ON ("VMPT"."NMDOCID"="VMDTEQ"."NMDOCID") AND ("VMPT"."WDDTTRNUM"="VMDTEQ"."WDTRANNUM"))
 LEFT OUTER JOIN "VMMTRM" "VMMTRM" ON ("VMPTEQ"."TXEQUP"="VMMTRM"."TXEQUP") AND ("VMPTEQ"."TXMETER"="VMMTRM"."TXMETER"))
 LEFT OUTER JOIN "VMEQUP" "VMEQUP" ON ("VMPTEQ"."TXEQUP"="VMEQUP"."TXEQUP"))
 LEFT OUTER JOIN "VMSERV" "VMSERV" ON ("VMPTSV"."WDSERVTYPE"="VMSERV"."WDTYPE") AND ("VMPTSV"."TXSERV"="VMSERV"."TXSERV"))

错误尝试(将连接条件移至WHERE子句)

SELECT
...
WHERE
"VMPH"."NMPSTID" = "VMPT"."NMPSTID"
 AND "VMPH"."TXTERM" = "ARRTA"."CODETERM"
 AND "VMPH"."NMAGRE" = "VMAGRE"."NMDOCID"
 AND "VMPH"."NMDOCID" = "VMDH"."NMDOCID"
 AND (("VMPT"."NMPSTID" = "VMPTIT"."NMPSTID") AND ("VMPT"."WDTRANNUM" = "VMPTIT"."WDTRANNUM"))
 AND (("VMPT"."NMPSTID" = "VMPTSV"."NMPSTID") AND ("VMPT"."WDTRANNUM" = "VMPTSV"."WDTRANNUM"))
 AND (("VMPT"."NMPSTID"="VMPTEQ"."NMPSTID") AND ("VMPT"."WDTRANNUM"="VMPTEQ"."WDTRANNUM"))
 AND (("VMPT"."NMDOCID"="VMDTEQ"."NMDOCID") AND ("VMPT"."WDDTTRNUM"="VMDTEQ"."WDTRANNUM"))
 AND (("VMPTEQ"."TXEQUP"="VMMTRM"."TXEQUP") AND ("VMPTEQ"."TXMETER"="VMMTRM"."TXMETER"))
 AND "VMPTEQ"."TXEQUP" = "VMEQUP"."TXEQUP"
 AND (("VMPTSV"."WDSERVTYPE"="VMSERV"."WDTYPE") AND ("VMPTSV"."TXSERV"="VMSERV"."TXSERV"))

转换后的标准JOIN语法SQL

SELECT
...
FROM
 "VMPH" "VMPH"
LEFT OUTER JOIN "VMPT" "VMPT" 
    ON "VMPH"."NMPSTID" = "VMPT"."NMPSTID"
LEFT OUTER JOIN "ARRTA" "ARRTA" 
    ON "VMPH"."TXTERM" = "ARRTA"."CODETERM"
LEFT OUTER JOIN "VMAGRE" "VMAGRE" 
    ON "VMPH"."NMAGRE" = "VMAGRE"."NMDOCID"
LEFT OUTER JOIN "VMDH" "VMDH" 
    ON "VMPH"."NMDOCID" = "VMDH"."NMDOCID"
LEFT OUTER JOIN "VMPTIT" "VMPTIT" 
    ON "VMPT"."NMPSTID" = "VMPTIT"."NMPSTID" 
    AND "VMPT"."WDTRANNUM" = "VMPTIT"."WDTRANNUM"
LEFT OUTER JOIN "VMPTSV" "VMPTSV" 
    ON "VMPT"."NMPSTID" = "VMPTSV"."NMPSTID" 
    AND "VMPT"."WDTRANNUM" = "VMPTSV"."WDTRANNUM"
LEFT OUTER JOIN "VMPTEQ" "VMPTEQ" 
    ON "VMPT"."NMPSTID" = "VMPTEQ"."NMPSTID" 
    AND "VMPT"."WDTRANNUM" = "VMPTEQ"."WDTRANNUM"
LEFT OUTER JOIN "VMDTEQ" "VMDTEQ" 
    ON "VMPT"."NMDOCID" = "VMDTEQ"."NMDOCID" 
    AND "VMPT"."WDDTTRNUM" = "VMDTEQ"."WDTRANNUM"
LEFT OUTER JOIN "VMMTRM" "VMMTRM" 
    ON "VMPTEQ"."TXEQUP" = "VMMTRM"."TXEQUP" 
    AND "VMPTEQ"."TXMETER" = "VMMTRM"."TXMETER"
LEFT OUTER JOIN "VMEQUP" "VMEQUP" 
    ON "VMPTEQ"."TXEQUP" = "VMEQUP"."TXEQUP"
LEFT OUTER JOIN "VMSERV" "VMSERV" 
    ON "VMPTSV"."WDSERVTYPE" = "VMSERV"."WDTYPE" 
    AND "VMPTSV"."TXSERV" = "VMSERV"."TXSERV"

关键说明

  1. {oj}语法的作用:{oj}是ODBC规范中的连接标记,用于明确外层连接优先级,标准SQL中可直接移除,链式JOIN写法已能表达相同逻辑。
  2. 错误尝试的问题:把LEFT JOIN的连接条件移到WHERE子句后,会过滤掉连接表字段为NULL的记录,等同于将LEFT JOIN转为INNER JOIN,完全改变原查询逻辑。
  3. 转换要点:移除{oj}和多余嵌套括号,保留每个JOIN的ON子句与连接条件,维持原LEFT OUTER JOIN类型即可,标准SQL支持这种链式写法。

内容的提问来源于stack exchange,提问作者Florenz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:10:31