MyBatis SQL查询中含糊不清的列
问题描述:
我在下面的查询中遇到错误。你可以帮我吗?MyBatis SQL查询中含糊不清的列
错误是由不明确的列引起的。我有一个想法,我不确定。
我认为错误是在这里WorkUID列(暧昧):
<isNotEmpty property="uids">
AND WorkUID IN
<iterate property="uids" open="(" close=")" conjunction=",">
#uids[]#
</iterate>
</isNotEmpty>
以下是错误:
Cause: SqlMapClient operation; SQL [];
--- The error occurred while applying a parameter map.
--- Check the getData-InlineParameterMap.
--- Check the statement (query failed).
--- Cause: java.sql.SQLException: Ambiguous column name 'WorkUID'.; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred while applying a parameter map.
--- Check the getData-InlineParameterMap.
--- Check the statement (query failed).
--- Cause: java.sql.SQLException: Ambiguous column name 'WorkUID'.;
net.extraction.etl.exception.DAOException: Getting work UID by release datetime.
Cause: org.springframework.dao.TransientDataAccessResourceException: SqlMapClient operation; SQL [];
--- The error occurred while applying a parameter map.
--- Check the getData-InlineParameterMap.
下面是该查询:
<select id="getData" resultClass="java.lang.Integer" parameterClass="java.util.Map" >
<![CDATA[
SELECT xrn.WorkUID
FROM
(SELECT uow.WorkUID,
ROW_NUMBER() OVER(PARTITION BY wsh.WorkUID ORDER BY wsh.DT DESC) AS rnk
FROM UnitWork uow
INNER JOIN SigHist sh ON sh.SigUID = uow.SigUID
INNER JOIN DataCell d ON d.WorkUID = uow.WorkUID
INNER JOIN WorkStatHist wsh ON (wsh.WorkUID = uow.WorkUID
AND wsh.WorkUID = d.WorkUID
AND 8 =
(SELECT TOP 1 StatusUID
FROM WorkStatHist(NOLOCK)
WHERE WorkUID = uow.workUID
ORDER BY DT DESC))
WHERE (uow.ReleasedDT > #fromDate#)
OR (sh.UpdatedDT > #fromDate#)
AND d.EffectiveTo >= GETDATE() + 1
]]>
<dynamic>
<isNotEmpty property="toDate">
<![CDATA[
AND d.EffectiveTo < #toDate#
]]>
</isNotEmpty>
<isNotEmpty property="uids">
AND WorkUID IN
<iterate property="uids" open="(" close=")" conjunction=",">
#uids[]#
</iterate>
</isNotEmpty>
</dynamic>
<![CDATA[
) xrn
WHERE xrn.rnk=1
]]>
</select>
答
我我根本不熟悉MyBatis
,所以我不能说代码的那部分内容,但看起来你的问题是跟随着g部分:
<isNotEmpty property="uids">
AND WorkUID IN
<iterate property="uids" open="(" close=")" conjunction=",">
#uids[]#
</iterate>
</isNotEmpty>
特别是AND WorkUID IN
部分。
查询中有多个表有WorkUID
作为列,所以它不知道要从哪个表中提取。 。
看到,它被用作一个JOIN
约束为每个表,它并不需要特别关心我们告诉它在寻找这台
将其更改为以下应该清理的错误:
<isNotEmpty property="uids">
AND uow.WorkUID IN
<iterate property="uids" open="(" close=")" conjunction=",">
#uids[]#
</iterate>
</isNotEmpty>
这是什么语言......?显然还有一种除了SQL Server以外的语言。请适当地标记您的问题。请重命名您的标题。 – Siyual
你没有这个合格的...... AND WORKUID IN。在'' –
之后的Where语句中,感谢您的回复,它是一个使用mybatis编写的sql查询。 WEI_DBA,请您重新解释您在查询中发现错误的原因,因为我没有听到上面的解释。非常感谢你们 – Stephane