这是我的查询
SELECT DEFAULT2.DAY_NO AS DAY ,
DEFAULT2.WHSE_WKNG_DAY_IND AS WAREHOUSEWORKINGDAY ,
VALUE(CASE WHEN (DEFAULT2.DEFAULT_CUTOFF_IND='Y') THEN DEFAULT2.XPRES_CUTOFF_TIME ELSE
(SELECT DISTINCT(GREATEST(CNTRY.XPRESCUTOF_SHAW,CNTRY.XPRESCUTOF_NONSHAW,DEPOT.XPRESCUTOF_SHAW,DEPOT.XPRESCUTOF_NONSHAW))
FROM T_XPR_CNTRY_GRP CNTRY ,T_XPR_DEPOT_GRP DEPOT) END ,DEF2.XPRES_CUTOFF_TIME) AS EXPRESSCUTOFFTIME
FROM T_WHSEXPRESCUTOF DEFAULT2
INNER JOIN T_WHSEXPRESCUTOF DEF2 ON DEFAULT2.DAY_NO = DEF2.DAY_NO
ORDER BY DEFAULT2.DAY_NO WITH UR
当我通过ibatis 3(带注释)运行时,我的数据库是db2我收到错误
java.sql.SQLSyntaxErrorException:列'DEFAULT2.DEFAULT_CUTOFF_IND'要么不在FROM列表中的任何表中,要么出现在连接规范中,并且不在连接规范的范围内,或者出现在HAVING子句中,并且不在GROUP BY列表。如果这是CREATE或ALTER TABLE语句,则“DEFAULT2.DEFAULT_CUTOFF_IND”不是目标表中的列。 org.apache.ibatis.exceptions.IbatisException:.....
同样的查询通过像squirrel这样的sql客户端运行良好。我检查过没有访问权限问题。
这是Ibatis中的错误吗?我在mybatis3问题上发布了相同内容。
ibatis代码位于
之下@Select(value = {
"SELECT "+
"DEFAULT2.DAY_NO AS DAY "+
",DEFAULT2.WHSE_WKNG_DAY_IND AS WAREHOUSEWORKINGDAY"+
",VALUE( "+
"CASE "+
"WHEN (DEFAULT2.DEFAULT_CUTOFF_IND='Y') THEN "+
" DEFAULT2.XPRES_CUTOFF_TIME "+
"ELSE "+
" (SELECT DISTINCT(GREATEST(CNTRY.XPRESCUTOF_SHAW" +
",CNTRY.XPRESCUTOF_NONSHAW"+
",DEPOT.XPRESCUTOF_SHAW"+
",DEPOT.XPRESCUTOF_NONSHAW)) "+
" FROM T_XPR_CNTRY_GRP CNTRY "+
" ,T_XPR_DEPOT_GRP DEPOT) "+
"END "+
",DEF2.XPRES_CUTOFF_TIME) AS EXPRESSCUTOFFTIME "+
"FROM T_WHSEXPRESCUTOF DEFAULT2 "+
"INNER JOIN T_WHSEXPRESCUTOF DEF2 "+
"ON DEFAULT2.DAY_NO = DEF2.DAY_NO "+
"ORDER BY DEFAULT2.DAY_NO "+
"WITH UR"
})
@Results({
@Result(property="warehouseWorkingDay", jdbcType=JdbcType.CHAR,typeHandler=YesNoBooleanTypeHandler.class, column="WAREHOUSEWORKINGDAY"),
@Result(property="day", jdbcType=JdbcType.INTEGER,typeHandler= IntegerTypeHandler.class, column="DAY"),
@Result(property="expressCutOffTime", jdbcType=JdbcType.DATE,typeHandler=DateTypeHandler.class, column="EXPRESSCUTOFFTIME")
})
List<CutOffTimeImpl> getCutOffTimes();
问题
更详细的日志
java.sql.SQLSyntaxErrorException:列'DEFAULT2.DEFAULT_CUTOFF_IND'要么不在FROM列表中的任何表中,要么出现在连接规范中,并且不在连接规范的范围内,或者出现在HAVING子句中,并且不在GROUP BY列表。如果这是CREATE或ALTER TABLE语句,那么'DEFAULT2.DEFAULT_CUTOFF_IND'不是目标表中的列。
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(未知来源) 在org.apache.derby.impl.jdbc.Util.generateCsSQLException(未知来源) at org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(未知来源) at org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(未知来源) at org.apache.derby.impl.jdbc.EmbedConnection.handleException(未知来源) 在org.apache.derby.impl.jdbc.ConnectionChild.handleException(未知来源)
答案 0 :(得分:0)
这个问题已经解决了,我们在内存derby数据库(在开发和测试环境中)中使用了存根数据,并且在内存数据库表中没有出现报告为不是select的一部分的少数列。报告为“非表/视图”的表也不存在于内存数据库中。
我们是一个非常大的应用程序很难弄清楚这一点。现在我添加了在内存数据库中填充derby的列/表,作为启动脚本的一部分。
我避免使用Greatest()函数,因为它与derby不兼容,最终工作正常的查询是
SELECT
DEFAULT2.DAY_NO AS DAY
,DEFAULT2.WHSE_WKNG_DAY_IND AS WAREHOUSEWORKINGDAY
,VALUE(
CASE
WHEN DEFAULT2.DEFAULT_CUTOFF_IND='Y' THEN
DEFAULT2.XPRES_CUTOFF_TIME
ELSE
(SELECT DISTINCT(
SELECT MAX(maxquery.cutoff)
FROM
(SELECT CNTRY.XPRESCUTOF_SHAW AS cutoff
FROM T_XPR_CNTRY_GRP CNTRY
UNION
SELECT CNTRY.XPRESCUTOF_NONSHAW AS cutoff
FROM T_XPR_CNTRY_GRP CNTRY
UNION
SELECT DEPOT.XPRESCUTOF_SHAW AS cutoff
FROM T_XPR_DEPOT_GRP DEPOT
UNION
SELECT DEPOT.XPRESCUTOF_NONSHAW AS cutoff
FROM T_XPR_DEPOT_GRP DEPOT
) maxquery
) FROM T_XPR_CNTRY_GRP CNTRY,T_XPR_DEPOT_GRP DEPOT
)
END
,DEF2.XPRES_CUTOFF_TIME) AS EXPRESSCUTOFFTIME
FROM T_WHSEXPRESCUTOF DEFAULT2
INNER JOIN T_WHSEXPRESCUTOF DEF2
ON DEFAULT2.DAY_NO = DEF2.DAY_NO
ORDER BY DEFAULT2.DAY_NO
WITH UR
很抱歉,如果我让你花了很多时间来解决这个问题。