摘要:SQL 中的 Join、Like 與 位元運算應用..
01 SQL 中的 Join、Like 與 位元運算應用..
02
03
04 一.狀況.Power_Code 欄內只用 A01,A02,...的方式去紀錄權限...
05
06 Select ID , Power_Code , code , name
07 From sub_power A
08 Join (
09 Select 'A01' code , '功能1' name
10 Union All
11 Select 'A02' , '功能2'
12 Union All
13 Select 'A03' , '功能3'
14 Union All
15 Select 'A03' , '功能3'
16 ) B On ',' + A.Power_Code Like '%,' + B.code + ',%'
17 Where
18 Sub_System = 'IWMS'
19 Order By ID;
20
21 二.pron_class 用二的進位法去紀錄複選的公告類別
22 Select A.tre_no , pron_class , b.name
23 From Treat A
24 Join (
25 Select 0 [code] , '公民營廢棄物清除、處理及清理機構' [name]
26 Union All Select 1 , '事業廢棄物共同清除、處理機構'
27 Union All Select 2 , '依本法第二十八條第一項第三款第三目至第六目設置廢棄清除處理設施之機構'
28 Union All Select 3 , '執行機關'
29 Union All Select 4 , '運輸業'
30 Union All Select 5 , '其他非指定公告對象'
31 Union All Select 6 , '不明廢棄物棄置場'
32 Union All Select 7, '領有經動物防疫主管機關查驗合格證機構'
33 Union All Select 8 , '廠外經主管機關核准之貯存地點'
34 Union All Select 9 , '屬再生資源項目列管'
35 ) B On Power(2,b.code) & A.pron_class > 0
36 Order By tre_no;
37
38 再上述兩個方法中,都只用了一個欄位去紀錄複選的問題,第一個用 Like 去處理再
39 效能上應該不會好到那去資料量少又不想開一下檔Table時可以試試,第二個用
40 2的次方去紀錄複選的問題,資料看是比較難懂了一點,不過查詢時的效能,因為
41 只是用位元運算,速度上應該會跟正規拉下檔的方式差不多。
42
43 PS:
44 1.B 的部份正常應該是個 Table 不過沒建,先用子查詢頂頂:D
45 2.Join On 的條件還有很多的變化,不是只有 A.xxx = B.xxx ,多點想像力會有更多的可能^^
02
03
04 一.狀況.Power_Code 欄內只用 A01,A02,...的方式去紀錄權限...
05
06 Select ID , Power_Code , code , name
07 From sub_power A
08 Join (
09 Select 'A01' code , '功能1' name
10 Union All
11 Select 'A02' , '功能2'
12 Union All
13 Select 'A03' , '功能3'
14 Union All
15 Select 'A03' , '功能3'
16 ) B On ',' + A.Power_Code Like '%,' + B.code + ',%'
17 Where
18 Sub_System = 'IWMS'
19 Order By ID;
20
21 二.pron_class 用二的進位法去紀錄複選的公告類別
22 Select A.tre_no , pron_class , b.name
23 From Treat A
24 Join (
25 Select 0 [code] , '公民營廢棄物清除、處理及清理機構' [name]
26 Union All Select 1 , '事業廢棄物共同清除、處理機構'
27 Union All Select 2 , '依本法第二十八條第一項第三款第三目至第六目設置廢棄清除處理設施之機構'
28 Union All Select 3 , '執行機關'
29 Union All Select 4 , '運輸業'
30 Union All Select 5 , '其他非指定公告對象'
31 Union All Select 6 , '不明廢棄物棄置場'
32 Union All Select 7, '領有經動物防疫主管機關查驗合格證機構'
33 Union All Select 8 , '廠外經主管機關核准之貯存地點'
34 Union All Select 9 , '屬再生資源項目列管'
35 ) B On Power(2,b.code) & A.pron_class > 0
36 Order By tre_no;
37
38 再上述兩個方法中,都只用了一個欄位去紀錄複選的問題,第一個用 Like 去處理再
39 效能上應該不會好到那去資料量少又不想開一下檔Table時可以試試,第二個用
40 2的次方去紀錄複選的問題,資料看是比較難懂了一點,不過查詢時的效能,因為
41 只是用位元運算,速度上應該會跟正規拉下檔的方式差不多。
42
43 PS:
44 1.B 的部份正常應該是個 Table 不過沒建,先用子查詢頂頂:D
45 2.Join On 的條件還有很多的變化,不是只有 A.xxx = B.xxx ,多點想像力會有更多的可能^^