1.背景 或許你面試的時候被問到了mysql的排序問題 又或許你在學習排序演算法的時候想到了資料庫的排序是如何實現的呢 下麵重點從面試的角度來回答這個問題 2.面試回答 1.普通面試者回答 普通面試者的回答通常是點對點的回答,如下: MySQL 實現數據的排序主要通過排序演算法和索引結構來完成。排序操作 ...
例如,有如下一張表,表名為bk_test。插入了以下數據:
CREATE TABLE BK_TESK(id varchar2(10),s varchar2(20));
insert into BK_TESK values ('A','1,2,3');
insert into BK_TESK values ('B','4,5,6');
insert into BK_TESK values ('C','7,8');
查詢數據如圖所示
我們需要將欄位S中以逗號分隔的數據拆分成多行。結果如圖所示
實現將一行數據拆分成多行的代碼如下所示
SELECT
id,
TRIM(REGEXP_SUBSTR(s, '[^,]+', 1, LEVEL)) AS s
FROM
BK_TESK
CONNECT BY
PRIOR SYS_GUid() IS NOT NULL
AND LEVEL <= REGEXP_COUNT(s, ',') + 1
AND PRIOR id = id
ORDER BY
id, s;
1: PRIOR id = id這個條件的主要作用是確保層次查詢在處理每個id 時保持連續性
- PRIOR 關鍵字用於引用上一行的值。
- 這個條件使得每次迭代都使用相同的 id 值。
- 它防止查詢跨越不同的 id 值,確保每個 id 的所有拆分值都被正確處理。
- 例如,當處理 'a' 的值時,這個條件確保不會跳到 'b' 的值,直到 'a' 的所有值都被處理完。
- id欄位必須是唯一值,不然查詢結果會出現重覆值。如果id不是唯一,可以使用rowid(PRIOR rowid = rowid)