0

私はこのようなものを持っています:

<select id="group" parameterClass="HashMap" resultMap="group">
       SELECT *
       FROM GROUP
       WHERE ID_USER_GROUP NOT IN (
               SELECT GS.ID_USER_GROUP
               FROM GROUP_SYSTEM GS, GROUP_USER GU
               WHERE GS.ID_USER_GROUP = GU.ID_USER_GROUP
               <dynamic prepend="WHERE">            
                     <isNotEmpty prepend="AND" property="role">
                          GU.ID_ROLE = #role#
                     </isNotEmpty>                            
                     <isNotEmpty prepend="AND" property="userID">
                           GS.ID_USER = #userID#
                     </isNotEmpty>  
               </dynamic>        
               )
   </select>

しかし、これは「括弧の欠落」またはこのようなものを投げています。Toad のクエリは適切に機能しています (もちろん、動的なものはありません)。

この投稿を見たことがありますが、open/close 句をマージする方法がわかりません。select を別の場所から呼び出して、結果を反復処理する必要がありますか?

前もって感謝します!

4

2 に答える 2

0

サブクエリに閉じ括弧がありません

SELECT *
FROM GROUP
WHERE ID_USER_GROUP NOT IN 
    (
        SELECT GS.ID_USER_GROUP
        FROM GROUP_SYSTEM GS, GROUP_USER GU
        WHERE GS.ID_USER_GROUP = GU.ID_USER_GROUP
    ) -- <<=== HERE

JOINしかし、私はむしろ使いたいIN

SELECT  *
FROM    GROUP a
        LEFT JOIN
        (
            SELECT GS.ID_USER_GROUP
            FROM GROUP_SYSTEM GS, GROUP_USER GU
            WHERE GS.ID_USER_GROUP = GU.ID_USER_GROUP
        ) b ON a.ID_USER_GROUP = b.ID_USER_GROUP
WHERE   b.ID_USER_GROUP IS NULL
于 2013-02-08T12:19:01.610 に答える
0

myBatis のデバッグを有効にして、どの select ステートメントが生成されるかを確認します。通常、間違いを見つけるのに非常に役立ちます。

このサンプルでは、​​サンプルは次のようなクエリを生成するようです:

   SELECT *
   FROM GROUP
   WHERE ID_USER_GROUP NOT IN (
           SELECT GS.ID_USER_GROUP
           FROM GROUP_SYSTEM GS, GROUP_USER GU
           WHERE GS.ID_USER_GROUP = GU.ID_USER_GROUP
           WHERE            
                 AND
                      GU.ID_ROLE = #role#
                 AND
                      GS.ID_USER = #userID#       
           )

<dynamic prepend="WHERE"> ブロックを削除してみてください。私が覚えているように、myBatis がどのように正確にプリペンド パラメータをクエリに配置するかは、使用されているバージョンに関連しています。

于 2013-02-14T14:43:31.697 に答える