<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

    2012年10月9日

    一程序員家的水管壞了,他打電話叫來一個水管工修理。 水管工鼓搗了一個小時,終于把管子修好了,他遞給程序員一張600元的帳單。 “600元!”程序員憤怒地說:“我當程序員一天都賺不了這么多錢!” “是啊。”水管工平靜地說,“我當程序員的時候也是。”

    posted @ 2012-10-29 14:04 a_alter 閱讀(559) | 評論 (0)編輯 收藏

    例  如下
    表  A 
    (1--->n) 表B (B 可能為空)
    (n---->n)表C
    (n---->n)表D

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

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

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

    再進行擴展篩選  進行C關(guān)聯(lián)D級別的條篩選
    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級別的篩選就會破壞B級別的賽選。
    這個時候測試效果就是 D 級別的join條件 會破壞 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;  

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

    =======================================================================
    后來找同學幫忙  得知他以前也遇到這情況
    改寫為如下條件
    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
    這樣就不會破壞B(+) 效果。  

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

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

    在這個問題上有個地方被欺騙了 

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

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

    如果沒有確切的保障的話
    可能就需要使用 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ù)雜度高了一點。





    posted @ 2012-10-09 10:15 a_alter 閱讀(637) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 四虎影视成人永久免费观看视频| 在线精品亚洲一区二区| 亚洲视频中文字幕| 四虎永久在线精品免费一区二区 | 亚洲毛片在线观看| 欧美激情综合亚洲一二区| 亚洲精品免费在线观看| 久久亚洲免费视频| 免费人成在线观看视频高潮| 精品亚洲视频在线观看| 中文字幕手机在线免费看电影| 亚洲综合国产精品第一页| a一级爱做片免费| 亚洲国产成人久久综合一区77| 黄色免费网站在线看| 一级毛片免费毛片一级毛片免费 | 亚洲免费一区二区| 国产乱子影视频上线免费观看| 亚洲va在线va天堂成人| 免费毛片在线播放| 激情婷婷成人亚洲综合| 亚洲国产综合精品一区在线播放| 老司机午夜在线视频免费| 国产亚洲精aa成人网站| 国产成人AV免费观看| 亚洲第一网站免费视频| 18禁成年无码免费网站无遮挡| 亚洲欧美自偷自拍另类视| 最近2019中文字幕mv免费看| 真人无码作爱免费视频| 亚洲VA中文字幕无码毛片| 1000部啪啪未满十八勿入免费| 亚洲人成伊人成综合网久久久| 亚洲AV综合色区无码一二三区 | 亚洲成人免费在线| 337p日本欧洲亚洲大胆精品555588 | 成人免费AA片在线观看| 国产精一品亚洲二区在线播放| 无码人妻AV免费一区二区三区| 亚洲影视自拍揄拍愉拍| 亚洲男人天堂2020|