mysql中的FIND_IN_SET函數
需求:根據省份id,查詢可以在該省份下發信息的通道id
sql語句:
SELECT cpa.CHANNEL_ID id FROM channel_price_batch cpa WHERE ( SELECT FIND_IN_SET( '021', cpa.PROVINCE_ID_LIST ) AS a ) > 0 //若‘021’在一條記錄中存在,則a=1;若在多條記錄中存在,有幾條a就等於幾 #GROUP BY cpa.CHANNEL_ID //把查詢結果去重,只顯示一條 ORDER BY cpa.CREATE_TIME DESC,cpa.ID DESC //按創建時間降序排序,若創建時間一樣,就按id降序排序
項目中用的:
<select id="findPageByProvinceId" resultType="java.util.Map">
SELECT
c.ID id,
c.NAME name,
c.SP_ID spId,
c.SERVER_IP serverIp,
c.SERVER_PORT serverPort,
c.PROTOCOL_TYPE protocolType,
c.SERVICE_ID serviceId,
c.PROVINCE_ID provinceId,
c.STATUS status
FROM
channel c
left outer join channel_price_batch cpa on cpa.CHANNEL_ID = c.ID
where (SELECT FIND_IN_SET(#{provinceId}, cpa.PROVINCE_ID_LIST) AS a)>0
GROUP BY c.ID //去重
ORDER BY c.CREATE_TIME DESC,c.ID DESC //按創建時間降序排序,若創建時間一樣,就按id降序排序
</select>
查詢結果: