X++查询报错“Join Expected on the select statement”求助
解决X++查询“Join Expected on the select statement”报错问题
错误原因
你这段代码的报错根源是:select语句的where条件直接引用了另一个表实例purchTable的RecId字段,但未对intentLetter和purchTable做显式表连接。X++编译器会将这种跨表字段引用判定为需要使用join操作,因此抛出该错误。
另外要注意:intentLetter.RecId == purchTable.RecId这个逻辑大概率有误——RecId是每个表的唯一记录标识,不同表的RecId不可能对应同一条数据,你应该检查是否写错了关联字段(比如intentLetter表中应该有指向purchTable的外键,比如PurchTableRecId)。
修正方案
这里提供两种可行的修正方式:
方式1:将跨表字段存入局部变量后查询
把purchTable的字段值先赋值给局部变量,再用变量作为查询条件,避免直接跨表引用:
purchTable = this.purchTable; if (purchTable) { str intentLetterId_IT = purchTable.IntentLetterId_IT; RecId purchTableRecId = purchTable.RecId; // 先把RecId存入局部变量 select intentLetter.RemainAmountMST() from intentLetter where intentLetter.IntentLetterId == intentLetterId_IT && intentLetter.PurchTableRecId == purchTableRecId; // 替换为正确的关联字段,比如PurchTableRecId if (intentLetter) { Amount remainAmountMST = intentLetter.RemainAmountMST(); info(strFmt("RemainAmountMST: %1", remainAmountMST)); } }
方式2:添加显式表连接
如果两个表确实需要关联查询,直接添加join语句:
purchTable = this.purchTable; if (purchTable) { select intentLetter.RemainAmountMST() from intentLetter join purchTable where intentLetter.IntentLetterId == purchTable.IntentLetterId_IT && intentLetter.PurchTableRecId == purchTable.RecId; // 替换为正确的关联字段 if (intentLetter) { Amount remainAmountMST = intentLetter.RemainAmountMST(); info(strFmt("RemainAmountMST: %1", remainAmountMST)); } }
关键提示
优先检查关联字段的正确性,确认intentLetter表中与purchTable关联的字段是什么,不要用RecId进行跨表匹配,这会导致查询不到正确数据。
内容的提问来源于stack exchange,提问作者Fabrizio Mastrone
相关产品推荐
相关产品推荐

