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



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































ORACLE版:


















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

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