我們經(jīng)常會遇到想要把一對多關(guān)系轉(zhuǎn)換成為一對一關(guān)系,以方便顯示。例如有如下關(guān)系:
Class(ClassID,ClassName)
和
Student(SID,SName,ClassID)
,并且,這兩個關(guān)系存在以下測試數(shù)據(jù):
Class:
001 |
語文 |
002 |
數(shù)學(xué) |
Student :
031231301 |
張三 |
001 |
031231301 |
張三 |
002 |
031231302 |
李四 |
001 |
那么,這兩個關(guān)系表達(dá)的意思:選語文的有張三和李四;選數(shù)學(xué)的有李四。如果想做一個視圖(
V_STU_CLA
)來表達(dá)這種一對多關(guān)系(一門課程,被多個學(xué)生所選擇),可以使用一個簡單的左聯(lián)語句來完成:
得到的結(jié)果如下:



ClassID |
ClassName |
SName |
001 |
語文 |
張三 |
001 |
語文 |
李四 |
002 |
數(shù)學(xué) |
張三 |
這樣雖然能夠清晰的表達(dá)選課關(guān)系,但是,某些情況下,它不如下面這種形式來得一目了然:
ClassID |
ClassName |
SNames |
001 |
語文 |
張三 , 李四 |
002 |
數(shù)學(xué) |
張三 |
要達(dá)到這樣的目的,需要完成一個一對多關(guān)系到一對一關(guān)系的轉(zhuǎn)換。這樣的轉(zhuǎn)換,在數(shù)據(jù)庫中,可以借助函數(shù)來進(jìn)行,因為函數(shù)中應(yīng)用到了游標(biāo),故對于 Oracle 和 MSSQL 稍有不同,附上兩個版本的函數(shù) SQL 代碼:
MS-SQL
版:
MS-SQL
調(diào)用時,通過以下語句實現(xiàn):
ORACLE
中調(diào)用方法類似。































ORACLE版:


















更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
