1. 程式人生 > >關於mybatis多表查詢只查詢部分欄位,而丟失一整條資料問題

關於mybatis多表查詢只查詢部分欄位,而丟失一整條資料問題

今天在寫一個list資料按某欄位排序問題時遇到了一個問題,就是有很多個數據這個欄位一樣時,只會查出來一個。

如下

裡面有3個5

頁面,5條資料只查出來3條資料

基礎資訊和接單什麼資訊的分成了2個表,根據接單數排名

select e.engineer_name,e.img_url,ed.order_addcount from engineer_details ed left join engineer e
on ed.engineer_id=e.engineer_id order by ed.order_addcount desc;

我一看只有三條資料,心想肯定是order by的問題,把重複排名的其中2條資料給去掉了,我把其中2個5改成了2和4,結果5條資料就出來了。但還是得解決重複問題啊,然後

select e.engineer_name,e.img_url,ed.order_addcount from engineer_details ed left join engineer e
on ed.engineer_id=e.engineer_id order by ed.order_addcount desc,ed.engineer_details_id asc;

多加了個條件 ed.engineer_details_id asc; 先按接單數量再按主鍵排序,我想這下沒錯了吧,又把那兩條資料改回5。

結果:???
這裡寫圖片描述
???

這是什麼情況,我不管了先去controller輸出列印一下資料

List<EngineerDetails> OrderAddCount = engineerService.engineerOrderAddCount();
for (EngineerDetails e:OrderAddCount){
                System.out.println(e.getEngineer().getEngineerName());
}

看了一下控制檯:
這裡寫圖片描述

這是什麼鬼,資料庫查出5條,然後返回到controller只有3條? 有點慌。

然後我直接把什麼order by,left join 刪了,只查一個接單數量表

select
ed.order_addcount from engineer_details ed;
List<EngineerDetails> OrderAddCount = engineerService.engineerOrderAddCount();

        for (EngineerDetails e:OrderAddCount){
            System.out.println(e.getOrderAddCount());
        }

又一次失望,
這裡寫圖片描述

。。。
已經快絕望了

就在快放棄的時候,我只能還想到了一種可能,就是返回物件

resultMap="engineerDetailsMap2"
<resultMap type="com.ht.bean.EngineerDetails" id="engineerDetailsMap2">
    <result column="engineer_details_id" property="engineerDetailsId" javaType="java.lang.Integer"/>
    <result column="engineer_id" property="engineerId" javaType="java.lang.Integer"/>
    <result column="order_count" property="orderCount" javaType="java.lang.Integer"/>
    <result column="order_addcount" property="orderAddCount" javaType="java.lang.Integer"/>
    <result column="comment_count" property="commentCount" javaType="java.lang.Integer"/>
    <result column="avg_attitude" property="avgAttitude" javaType="java.lang.String"/>
    <result column="avg_dress" property="avgDress" javaType="java.lang.String"/>
    <result column="avg_technical" property="avgTechnical" javaType="java.lang.String"/>
    <result column="avg_punctual" property="avgPunctual" javaType="java.lang.String"/>
    <result column="avg_score" property="avgScore" javaType="java.lang.String"/>
    <result column="attitude_good" property="attitudeGood" javaType="java.lang.Integer"/>
    <result column="attitude_medium" property="attitudeMedium" javaType="java.lang.Integer"/>
    <result column="attitude_bad" property="attitudeBad" javaType="java.lang.Integer"/>

    <association property="engineer" javaType="com.ht.bean.Engineer">
      <result column="engineer_name" property="engineerName" javaType="java.lang.String"/>
      <result column="img_url" property="imgUrl" javaType="java.lang.String"/>
    </association>
  </resultMap>

我把

<association property="engineer" javaType="com.ht.bean.Engineer">
      <result column="engineer_name" property="engineerName" javaType="java.lang.String"/>
      <result column="img_url" property="imgUrl" javaType="java.lang.String"/>
    </association>

刪掉之後

這裡寫圖片描述

終於看到希望了。

這樣也不能解決啊,這兩個引數也有用,然後又想到之前

select e.engineer_name,e.img_url,ed.order_addcount from engineer_details ed left join engineer e
on ed.engineer_id=e.engineer_id order by ed.order_addcount desc,ed.engineer_details_id asc;

它是不是把 ed.order_addcount 這個接單數當主鍵來用了啊,如果是這樣的話一切都能講清了,於是我在查詢語句中多加了一條主鍵ed.engineer_details_id。

select ed.engineer_details_id,e.engineer_name,e.img_url,ed.order_addcount from engineer_details ed left join engineer e
    on ed.engineer_id=e.engineer_id order by ed.order_addcount desc,ed.engineer_details_id asc ;

查詢一下
這裡寫圖片描述

這裡寫圖片描述

可以了,不懂的地方就是,只查詢接單表的時候,返回的map裡有詳情表關聯後,為什麼相同接單數量的資料會被去掉,沒有關聯表後只查接單表如果按我之前說的它把 ed.order_addcount 當主鍵或唯一標識這個說法也不成立啊,求解。