select  (一个子查询) a
from    b(可能a表 与 b表有一定的关系 是指他们有可能产生连接)子查询是一个 select .......   from  ......... 的语句。想问一下 这样的select 语句是怎样执行的呀!
能详细的解释一下吗!
谢谢各位大侠了 有这方面的资料也行 学习!
能给举个例子 就更好了呀!  谢谢各位了呀!

解决方案 »

  1.   

    SELECT x.hkd_total_amt hkd_total_amt_3,
           y.hkd_total_amt hkd_total_amt_12
      FROM (SELECT   ROUND(sgp.po_ccy) hkd_total_amt
                FROM apps.suga_group_purchase_details sgp
               WHERE sgp.order_date > ADD_MONTHS (TRUNC (SYSDATE), -3)
            GROUP BY sgp.subsidary, sgp.supplier_name
            ORDER BY 1, 4 DESC) x,
           (SELECT   ROUND(sgp.po_ccy) hkd_total_amt
                FROM apps.suga_group_purchase_details sgp
               WHERE sgp.order_date > ADD_MONTHS (TRUNC (SYSDATE), -12)
            GROUP BY sgp.subsidary, sgp.supplier_name
            ORDER BY 1, 4 DESC) y
     WHERE (x.subsidary(+) = y.subsidary AND x.supplier_name(+) = y.supplier_name)这样的例子可以吗?
    反正都一样,整个SQL肯定是先执行最里面的select,也就是说由内到外执行。
    如上例:
    先执行
    SELECT   ROUND(sgp.po_ccy) hkd_total_amt
                FROM apps.suga_group_purchase_details sgp
               WHERE sgp.order_date > ADD_MONTHS (TRUNC (SYSDATE), -3)
            GROUP BY sgp.subsidary, sgp.supplier_name
            ORDER BY 1, 4 DESC
    在数据库内产生个临时表 x
    然后
    SELECT   ROUND(sgp.po_ccy) hkd_total_amt
                FROM apps.suga_group_purchase_details sgp
               WHERE sgp.order_date > ADD_MONTHS (TRUNC (SYSDATE), -12)
            GROUP BY sgp.subsidary, sgp.supplier_name
            ORDER BY 1, 4 DESC
    产生个临时表 y
    最后用两个临时表x,y作为外面的查询基表。最外层可以简化成这样。
    SELECT x.hkd_total_amt hkd_total_amt_3,
           y.hkd_total_amt hkd_total_amt_12
      FROM x,y
     WHERE (x.subsidary(+) = y.subsidary AND x.supplier_name(+) = y.supplier_name)不知道楼主能看明白吗?