摘要:[MSSQL] [Stored Procedure] [進行中] JOIN 的使用
好吧,
因為工作上的需要,
只好用著我很破爛的 DB 能力,
去寫著 SP,
碰著不太熟的語法,
剛好有需要使用到 join 這個語法,
而之前我剛好也很好奇這個東西,
所以趁工作完成之時,
把順便把這次工作心得之一的 join 寫下來
=== 我是離開抱怨區的可愛分隔線 ===
資料庫的寫法, 我們就先定義二張表好了,
這張是訂單表, 暫時先只有三筆訂單, 裏面有使用到0, 1, 7 三種狀態, 表單叫做 W_Order
那有了表單狀態, 當然就要有一張狀態定義表, 這張有定義了一些表單狀態, 叫做 W_Order_StatusIDMap
好了, 那這時候我們要來做查詢了, 如果我們希望可以做查詢, 最簡單的方式, 就是使用 select 的方式
這樣子就可以取得 W_Order 所有的資料了, 那如果我想把 Status 的資料換成 StatusIDMap 裏的中文呢?
有其他的方法可以使用, 但比較常看到的, 是使用 Join 的方式, 那我們要怎麼使用呢?
join 有分成 inner join / left join / right join, 我們先來看看這幾個 join 的差別好了~
- inner join
咦, 有人有發現少了一筆嗎? inner join 好像就是指二邊要一樣的才會顯示出來, 所以, 有一筆因為 status 沒有定義到, 就 byebye 了~
- left join
咦, 一樣是三筆耶, 不過那筆沒有狀態的, 好像有點問題耶, 怎麼都是 NULL 丫, left join 就是以左邊為主, 右邊要有的才會加入, 沒有就不會出現嚕~
所以沒有出現的狀態就沒有了, 反而那筆 Status 7 的出現了耶~
- right join
好吧, 剩下一個 right join, 不說大家應該也猜的到了, 就是以 join 進來的表單為主, 所以, 果不其然的,
status 7 的不見了, 而 status 一堆沒有在 order 中出現的, 反而都出現了
那大家對於這三個 join 有比較清楚明白一點了嗎?
好吧, 再回到剛剛的問題上, 那應該要怎麼做呢?!
我們先替我們的比較長的東西取個別名吧~
我們先使用 inner join 來做接下來的處理, 接下來, 把 W_Order 叫做 WOrder , 把另一個取叫做 IDMap,
別覺的差不太多, 記得, 如果是跨 DB 的使用, 或是 DB Table 有一些命名規格或是再加上日期時,
這個別名就會很好用了, 好了, 這時看起來, 至少可以開始寫我們要的名字了吧~
再把我們想要的欄位選出來就好了~
好吧, 看來就很完美了~
再整理一下, 其實有使用到的,
也就是使用 Join 的方式, 把其他表單抓進來, 再利用取別名的方式, 取個好區名的名字,
然後就可以輕鬆的點開去指定要顯示什麼了
那如果有多張表單呢?
好吧, 那就再多幾個 Join 就好了
不過由於剛剛寫的SP要做修改,
我就先掛上進行中
等等再回頭補完~
4/30
繼續未完成的內容
那如果是多個內容需要替換呢?
比如我希望把 OwnerID 也替換成人名呢?
那這時候, 就再多 join 幾個進來就可以了
好了, 這樣子名字也就替換完成了,
這樣子, 如果有多個表單需要一起弄,
大家是不是也比較清楚一點了呢?
來整理一下這裏用到什麼吧
-
join
- inner join
- left join
- right join
- 取別名
- 多個表單的 join
那就分享到這裏了
======
鸞鳳翎毛雨壓垂,
此時應被雀輕欺,
忽朝一日雲霄霽,
依舊還教振羽衣。
======
歡迎轉錄文章,
但記得保留網址和作者名稱~