目錄
- 場景
- 編寫SQL
- 分頁獲取該開票單號下的所有訂單列表
- 使用子查詢和 `in` 字句
- 使用 `find_in_set`
場景
從一張表中查詢某字段是逗號分隔的集合值,需要遍歷集合內每個值,將其作為條件去查詢另一張表,最終返回列表
編寫SQL
分頁獲取該開票單號下的所有訂單列表
使用子查詢和 in
字句
-- 優點:如果數據庫有合適的索引,在大數據集中更高效
-- 缺點:需要執行兩次查詢,首先是子查詢,然后是主查詢
select 訂單ID,道具名稱,充值時間,充值金額
from 訂單信息表
where 訂單ID in (select 訂單ids from 發票信息表where 發票流水號 = ?limit 1
)
order by 訂單創建時間 desc
offset ? limit ?
使用 find_in_set
-- 優點:一次查詢中完成
-- 缺點:在某些數據庫系統中可能不是很高效,尤其是在大表中
select b.訂單ID,b.道具名稱,b.充值時間,b.充值金額
from (select 訂單idsfrom 發票信息表where 發票流水號 = ?limit 1
) as a
left join 訂單信息表 as b on find_in_set(b.訂單ID, a.訂單ids) > 0;