關於mybatis多表查詢只查詢部分欄位,而丟失一整條資料問題
阿新 • • 發佈:2019-01-10
今天在寫一個list資料按某欄位排序問題時遇到了一個問題,就是有很多個數據這個欄位一樣時,只會查出來一個。
如下
頁面,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 當主鍵或唯一標識這個說法也不成立啊,求解。