union all結合decode完成對兩個表的條件選擇

wxjzqym發表於2011-06-21

    今天開發人員提了個需求,需求類似有兩個表a,b,如果a表中有記錄就將a表中的記錄查詢出來,如果a表中沒有記錄則將b表中的記錄查詢出來,並且希望透過一個sql語句實現。
    從需求可以得知,入口在a表中的記錄數,這個很簡單通select count(*) from a如果返回值為0則證明a表中沒有記錄,非0則有記錄(返回值不可能為負數),剛開始想了很久,也用decode或case這種條件判斷表示式,可它們返回的結果都是一個值而不是一個結果集,最終想到結合union all可以實現,因為結果集只從兩個表中選一個,所以根本不存在去掉重複記錄,減少不必要的排序操作。最後實現的sql如下:
    select * from a  union all select * from b where decode((select count(*) from a),0,0,1)=0;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20801486/viewspace-700441/,如需轉載,請註明出處,否則將追究法律責任。

相關文章