SQL错误[42972]:[SQL0338]JOIN谓词或MERGE ON子句无效
SQL错误[42972]:[SQL0338]JOIN谓词或MERGE ON子句无效 我试图运行下面的查询,但表DB170P中的联接中出现错误。你能帮我吗SQL错误[42972]:[SQL0338]JOIN谓词或MERGE ON子句无效,sql,db2,ibm-midrange,Sql,Db2,Ibm Midrange,SQL错误[42972]:[SQL0338]JOIN谓词或MERGE ON子句无效 我试图运行下面的查询,但表DB170P中的联接中出现错误。你能帮我吗 SELECT ACBAC AS "CBUYER" , HBAC AS "BORDER" , IHTRCD AS "TRANS" , IHRVCD AS "REV" , DATE(CONCAT(CONCAT(CONCAT(CON
SELECT ACBAC AS "CBUYER"
, HBAC AS "BORDER"
, IHTRCD AS "TRANS"
, IHRVCD AS "REV"
, DATE(CONCAT(CONCAT(CONCAT(CONCAT(IHTRMM,'/'),IHTRDD),'/'),IHTRCC*100+IHTRYY)) AS "RECD"
, VADFCD AS "DF"
, HVEND AS "VENC"
, VSNAME AS "VNAME"
, IHSRNO AS "SER"
, DATE(PHCUMM||'/'||PHCUDD||'/'||(PHCUCC*100+PHCUYY)) "CUST_DATE"
, PHBLNO AS "B/L"
, IHPLST AS "NF"
, IHORNO AS "PO"
, IHPNO AS "PN"
, MODEL
, (CASE WHEN CONCAT(IHTRCD, IHRVCD) IN('D20','D50T','D50Y','E30') THEN IHQTY ELSE -IHQTY END) AS "QTY"
, IHUNMS AS "UN"
, HPOCST AS "COST"
, DBCRCY AS "CURRENCY"
, (HPOCST*(CASE WHEN CONCAT(IHTRCD, IHRVCD) IN('D20','D50T','D50Y','E30') THEN IHQTY ELSE -IHQTY END)) AS "TOTAL"
--, CASE WHEN VADFCD='D' THEN 1 ELSE DB170P.DBRATE END AS "EXRAT"
--, (HPOCST*(CASE WHEN VADFCD='D' THEN 1 ELSE DB170P.DBRATE END)) AS "CLC"
--, (HPOCST*(CASE WHEN CONCAT(IHTRCD, IHRVCD) IN('D20','D50T','D50Y','E30') THEN IHQTY ELSE -IHQTY END)*(CASE WHEN VADFCD='D' THEN 1 ELSE DB170P.DBRATE END)) AS "TOTALLC"
FROM (SELECT * FROM IC090P UNION SELECT * FROM IC090B)AAA
LEFT OUTER JOIN (SELECT * FROM PC090P, PC100P WHERE PIBLNO=PHBLNO )X ON TRIM(PIIVNO)=TRIM(IHPLST)
,DB070P , IC010P
LEFT OUTER JOIN
(SELECT * FROM DB160P)DB160P
ON HCRCD=DB160P.DBCRCD
LEFT OUTER JOIN
(SELECT * FROM DB170P)DB170P
on (db160p.DBCRCD=DB170P.DBCRCD
AND DATE(CONCAT(CONCAT(CONCAT(CONCAT(DBEFMM,'/'),DBEFDD),'/'),
DBEFCC*100+DBEFYY))=DATE((DAYS(DATE(PHCUMM||'/'||PHCUDD||'/'||(PHCUCC*100+PHCUYY)))-2)))
DB170PDB170P中的左外连接SELECT*语法非常奇怪。。。
左外接DP170P是您真正需要的
在连接到DB170P的过程中,尝试转换为日期数据类型时可能会出现错误
您是否在作业日志中查看了其他错误信息
我建议
从嵌套表表达式NTE移动到通用表表达式CTE
构建一个用户定义的函数UDF来处理日期转换或下载开源
在CTEs中通过自定义项进行日期转换
使用显式联接
通常最好不要使用SELECT*,即使您确实需要所有列
以下是一个CTE版本开始时的样子
with AAAA as (SELECT trim(IHPLST) as lastInvNbr
FROM IC090P
UNION
SELECT trim(IHPLST)
FROM IC090B)
, X as (SELECT trim(PIIVNO) as InvNbr
FROM PC090P
join PC100P
on PIBLNO=PHBLNO
)
select *
from aaaa join X on aaaa.lastInvNbr = x.InvNo
除了可重用之外,CTE还可以很容易地从mycte中删除SELECT*,以便在构建语句时可以看到中间结果。错误消息是针对DB2的,因此MySQL标记不合适。显式连接链在隐式、逗号分隔的连接之前进行计算。范围问题?最好的编程实践是限定所有列,至少当涉及多个表时。HCRCD属于哪个表?它属于IC010P表。