多次为 'PAGE_TABLE_ALIAS' 指定了列 'XXX' 错误解决

在使用mybatis 级联一对多查询时遇到一个错误:

uncategorized SQLException; SQL state [S0001]; error code [8156]; 多次为 'PAGE_TABLE_ALIAS' 指定了列 'COID'。; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 多次为 'PAGE_TABLE_ALIAS' 指定了列 'COID'。

原因是在A表有一个字段coid, B表也有一个coid,在使用分页时导致俩个重复的coid无法区分造成的,我们看一下打印出的sql:

SELECT TOP 1 * FROM 
(SELECT ROW_NUMBER() OVER (ORDER BY CR_Style) PAGE_ROW_NUMBER, * FROM 
   (SELECT cc.*, cm.* FROM [wx].[dbo].[CM_Company] cc LEFT JOIN [wx].[dbo].[CM_Matcher] cm ON cc.coid = cm.coid WHERE cc.CO_Name LIKE '%武汉%') 
   AS PAGE_TABLE_ALIAS )
 AS PAGE_TABLE_ALIAS WHERE PAGE_ROW_NUMBER > 1 ORDER BY PAGE_ROW_NUMBER;

可以看到 虽然我们对俩张表取了别名, 但在分页时俩张表合并成了*, 所以有字段重复时导致无法识别报错。

解决办法:对其中重复的字段取别名
修改之前的sql及resultMap:

 <resultMap id="BaseCompanyMap" type="com.wx.wlcx.model.CMCompany" >
    <id column="COID" property="cmcoid" jdbcType="NCHAR" />
    <result column="NDID" property="ndid" jdbcType="NCHAR" />
    <result column="CPID" property="cpid" jdbcType="NCHAR" />
    <result column="CO_Base" property="coBase" jdbcType="INTEGER" />
    <result column="CO_Type" property="coType" jdbcType="INTEGER" />
    <result column="LG_Code" property="lgCode" jdbcType="NVARCHAR" />
    <result column="CO_Name" property="coName" jdbcType="NVARCHAR" />
    <result column="CO_Addr" property="coAddr" jdbcType="NVARCHAR" />
    <result column="CO_Time" property="coTime" jdbcType="TIMESTAMP" />
    <result column="CO_State" property="coState" jdbcType="INTEGER" />
    <result column="CO_Share" property="coShare" jdbcType="INTEGER" />
    <result column="CO_Phone" property="coPhone" jdbcType="NVARCHAR" />
    <result column="CO_Spell" property="coSpell" jdbcType="NVARCHAR" />
    <result column="CO_Linker" property="coLinker" jdbcType="NVARCHAR" />
    <result column="CO_LkCode" property="coLkcode" jdbcType="NVARCHAR" />
    <result column="CO_E_Mail" property="coEMail" jdbcType="NVARCHAR" />
    <result column="CO_BkType" property="coBktype" jdbcType="INTEGER" />
    <result column="CO_BkCode" property="coBkcode" jdbcType="NVARCHAR" />
    <result column="CO_AcName" property="coAcname" jdbcType="NVARCHAR" />
    <result column="CO_VcType" property="coVctype" jdbcType="NVARCHAR" />
    <result column="CO_VcName" property="coVcname" jdbcType="NVARCHAR" />
    <result column="CO_TxCode" property="coTxcode" jdbcType="NVARCHAR" />
    <result column="CO_BcFate" property="coBcfate" jdbcType="INTEGER" />
    <result column="CO_Stable" property="coStable" jdbcType="INTEGER" />
    <result column="CO_VWRate" property="coVwrate" jdbcType="DOUBLE" />
    <result column="CO_Router" property="coRouter" jdbcType="NVARCHAR" />
    <result column="CO_Server" property="coServer" jdbcType="NVARCHAR" />
    <result column="CO_ReMark" property="coRemark" jdbcType="NVARCHAR" />
    <result column="CO_MapX" property="coMapx" jdbcType="DOUBLE" />
    <result column="CO_MapY" property="coMapy" jdbcType="DOUBLE" />
    <result column="CO_LaType" property="coLatype" jdbcType="INTEGER" />
    <result column="CO_Starts" property="coStarts" jdbcType="INTEGER" />
    <result column="CO_PicLogo" property="coPiclogo" jdbcType="NVARCHAR" />
    <result column="CO_Introduction" property="coIntroduction" jdbcType="NVARCHAR" />
    <result column="CO_Survev" property="coSurvev" jdbcType="NVARCHAR" />
    <collection property="cmMatchers" ofType="CMMatcher" >
      <id column="COID" property="coid" jdbcType="NCHAR" />
      <id column="CR_Idx" property="crIdx" jdbcType="INTEGER" />
      <result column="CR_Mode" property="crMode" jdbcType="INTEGER" />
      <result column="CT_Mode" property="ctMode" jdbcType="INTEGER" />
      <result column="CR_Fate" property="crFate" jdbcType="DOUBLE" />
      <result column="RG_Code" property="rgCode" jdbcType="NVARCHAR" />
      <result column="RG_Name" property="rgName" jdbcType="NVARCHAR" />
      <result column="AR_Code" property="arCode" jdbcType="NVARCHAR" />
      <result column="AR_Name" property="arName" jdbcType="NVARCHAR" />
      <result column="CM_Code" property="cmCode" jdbcType="NVARCHAR" />
      <result column="CM_Name" property="cmName" jdbcType="NVARCHAR" />
      <result column="CR_Addr" property="crAddr" jdbcType="NVARCHAR" />
      <result column="CR_Style" property="crStyle" jdbcType="INTEGER" />
      <result column="CR_Grade" property="crGrade" jdbcType="INTEGER" />
    </collection>
  </resultMap>
  
    <select id="findCompany" resultMap="BaseCompanyMap" >
select cc.*, cm.* from CM_Company cc left join CM_Matcher cm on cc.coid = cm.coid
<where>
  <if test="keyword != null">
    cc.CO_Name like '%${keyword}%'
  </if>

  <if test="arCode != null">
    or cm.AR_Code = #{arCode}
  </if>

  <if test="arName != null">
   and cm.AR_Name like '%${arName}%'
  </if>
</where>
  ORDER BY cm.CR_Style

修改之后的sql及resultMap(将CMMatcher 中的coid 修改为cmcoid):

<id column="CMCOID" property="coid" jdbcType="NCHAR" />

打印执行的sql:

SELECT TOP 1 * FROM 
(SELECT ROW_NUMBER() OVER (ORDER BY CR_Style) PAGE_ROW_NUMBER, * FROM 
   (SELECT 
 cc.*,  
  cm.COID as CMCOID, cm.CR_Idx, cm.CR_Mode, cm.CT_Mode, cm.CR_Fate, cm.RG_Code, cm.RG_Name,
    cm.AR_Code, cm.AR_Name, cm.CM_Code, cm.CM_Name, CR_Addr, CR_Style, CR_Grade
    FROM [wx].[dbo].[CM_Company] cc LEFT JOIN [wx].[dbo].[CM_Matcher] cm ON cc.coid = cm.coid WHERE cc.CO_Name LIKE '%武汉%') 
   AS PAGE_TABLE_ALIAS )
 AS PAGE_TABLE_ALIAS WHERE PAGE_ROW_NUMBER > 1 ORDER BY PAGE_ROW_NUMBER;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值