<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 8, comments - 0, trackbacks - 0, articles - 11

    Oracle LEFT JOIN 多層級(jí)問題

    Posted on 2012-10-09 10:15 a_alter 閱讀(626) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫
    例  如下
    表  A 
    (1--->n) 表B (B 可能為空)
    (n---->n)表C
    (n---->n)表D

    現(xiàn)在有如下問題  在查詢的時(shí)候我們?cè)试Sb為空的A數(shù)據(jù)
    Select * from A,B where A.B_AID = B.AID(+)

    擴(kuò)展查詢  如果進(jìn)行B關(guān)聯(lián)C級(jí)別的條件過濾
    Select * from A,B, C where A.B_AID = B.AID(+) and B.C_AID = C.AID;  

    這個(gè)時(shí)候C能夠知道B是可以為空的, 這個(gè)時(shí)候的join效果是, 如果在A關(guān)聯(lián)B  B存在的情況下 在使用 C的join 條件進(jìn)行篩選。 這個(gè)時(shí)候B為空的A條件還是可以擺查出來的。 只不過數(shù)據(jù)列B為空而已

    再進(jìn)行擴(kuò)展篩選  進(jìn)行C關(guān)聯(lián)D級(jí)別的條篩選
    Select * from A,B,C,D where A.B_AID = B.AID(+) and B.C_AID = C.AID and C.D_AID = D.AID;  

    這樣的D級(jí)別的篩選就會(huì)破壞B級(jí)別的賽選。
    這個(gè)時(shí)候測(cè)試效果就是 D 級(jí)別的join條件 會(huì)破壞 B的left join 效果。

    你可能想到改寫條件如下
    Select * from A,B,C,D where A.B_AID = B.AID(+) and B.C_AID = C.AID and C.D_AID(+) = D.AID;  

    可惜我測(cè)試結(jié)果和full join 的效果是一樣的,不是oracle高手, 誰知道的留個(gè)言火鏈接  謝謝

    =======================================================================
    后來找同學(xué)幫忙  得知他以前也遇到這情況
    改寫為如下條件
    select * from (Select ....,C.D_AID from A,B,C where A.B_AID = B.AID(+) and B.C_AID = C.AID ) E,D where E.D_AID(+) = D.AID
    這樣就不會(huì)破壞B(+) 效果。  

    個(gè)人理解就是 select 的組織數(shù)據(jù)效果。具體不清楚 歡迎發(fā)言。

    =======================================================================
    補(bǔ)充:
    今天我才知道  left join 和 inner join 欄位是否必填還有關(guān)系。

    在這個(gè)問題上有個(gè)地方被欺騙了 

    就是在 A Left join B  inner JOIN C 的時(shí)候   如果 B 的 C 字段是必填的話  那么就相當(dāng)于  left join。 如果不是必填的話 你必須手動(dòng)的指示 left join (+)  。
    =====================================================================
    補(bǔ)充 2012/10/19   發(fā)現(xiàn)以上的理解不全面

    A--B(+) 意思指B 端可為空, 如果 對(duì)B -- C 下面的元素進(jìn)行賽選, 在局部看 B 和 C 的關(guān)系是兩段都必須存在的, 但是在A -- B(+) 的前提下 C可以為空的,  所以需要使用 B --- C(+) 來進(jìn)行關(guān)聯(lián)  這樣的壞處是可能會(huì)加載出 B  (存在)-- C (不存在) 這樣的錯(cuò)誤數(shù)據(jù)。 當(dāng)然如果系統(tǒng)中有對(duì)這種數(shù)據(jù)有確實(shí)保障的時(shí)候可以忽略該問題

    如果沒有確切的保障的話
    可能就需要使用 A --- D(+) 其中D 為  select * from B,C where B = C 這樣的過濾方式, 但是這樣就增加了復(fù)雜度, 你需要將可能用到的查詢條件和查詢結(jié)果集在D中 select 一一列出來

    在 Select A.*,R1,R2,R3 from A ,(select B.A_Aid,c1,c2,c3,R1,R2,R3 from B,C where B.C_AID= C.Aid) D where A.Aid = B.A_Aid and c1 = ? and c2 = ? ....

    Sql 復(fù)雜度高了一點(diǎn)。






    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲精品无码激情AV| 亚洲毛片αv无线播放一区| 特级毛片A级毛片免费播放| 亚洲日韩涩涩成人午夜私人影院| 国产在线一区二区综合免费视频| 亚洲最大黄色网址| 青青青国产免费一夜七次郎| 久久久久久国产a免费观看不卡| 亚洲黄色免费电影| 亚洲成av人片天堂网老年人| 无码日韩精品一区二区免费暖暖 | 一个人免费视频在线观看www | 亚洲日韩AV一区二区三区四区| 亚洲伊人久久综合影院| 2022久久国产精品免费热麻豆| 国产成人人综合亚洲欧美丁香花| 亚洲AV无码乱码在线观看富二代| 四虎免费在线观看| 久久免费观看国产99精品| 亚洲av无码偷拍在线观看| 亚洲三级电影网站| 亚洲精品国产日韩无码AV永久免费网| 最近免费中文字幕高清大全 | 皇色在线免费视频| 亚洲色少妇熟女11p| 亚洲国产精品VA在线观看麻豆| 青青草国产免费久久久91 | 91麻豆精品国产自产在线观看亚洲| 成人免费黄色网址| a成人毛片免费观看| 色婷婷六月亚洲综合香蕉| 亚洲系列国产精品制服丝袜第| 亚洲精品成a人在线观看| 国内精品乱码卡1卡2卡3免费| 女同免费毛片在线播放| 麻豆亚洲AV成人无码久久精品 | 四虎影库久免费视频| 免费一本色道久久一区| 四虎影视成人永久免费观看视频| 一级免费黄色大片| 国产成人久久精品亚洲小说|