[MSSQL] [Stored Procedure] JOIN 的使用

  • 1278
  • 0
  • 2014-05-02

摘要:[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

那就分享到這裏了

 

======

鸞鳳翎毛雨壓垂,

此時應被雀輕欺,

忽朝一日雲霄霽,

依舊還教振羽衣。

======

歡迎轉錄文章,

但記得保留網址和作者名稱~