2017-07-26 30 views
0

以下のクエリでエラーが発生しました。手伝っていただけませんか?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> 
+0

これはどの言語ですか...? SQL Server以外にも、明らかに別の言語が使用されています。質問に適切なタグを付けてください。タイトルの名前を変更してください。 – Siyual

+0

この資格を持っていません...「AND WorkUID IN」。 ' ' –

+0

返事をありがとう、mybatisで書かれたSQLクエリです。 WEI_DBA、あなたは上記のあなたの説明をキャッチしなかったので、あなたはそのクエリーで何が間違っているかを再考してください。ありがとうございました – Stephane

答えて

1

私は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> 
+0

+ 1コメント:すべてのテーブルのJOIN制約として使用されていることを確認してください。 – xQbert

+0

皆さん、ありがとうございます。私はSiyualの指導に従ってそれを修正しました。 – Stephane

+0

もう一度皆さん、私は上記の質問について最後の質問をすることができますか? WHERE wsh.WorkUID = uow.workUID \tとuow.WorkUID IN(55)は、私のSELECT TOP 1 StatusUID FROM WorkStatHist(NOLOCK)のwhere whereの条件のように、新しい条件を追加するにはどうしたらいいですか?それは私の新しい状態を考慮に入れません – Stephane

関連する問題