Oracle與SQL-Server數據庫SQL"樹查詢"對比[按照父子節點關係遞歸拼接]

說明:將多行(包含父子關係)樹狀查詢結果符合條件的父子關係記錄按照符號進行等級層次拼接組成每行結果;其中包含兩種SQLServer和Oracle數據庫的查詢方式,僅供參考,目前正在學習中,當中有語法不規範處請勿對號入座。

1. 【SQLServer】"樹查詢"拼接語句如下:

With SubQuery (upmaterialnumber,qty,subPartNo,SumDrawingNumber) AS
  (Select
        R.upmaterialnumber, 
        R.qty, R.materialnumber as subPartNo,
	C.SumDrawingNumber as SumDrawingNumber 
   From ERP_D_MeterialRelation R,ERP_D_BillOfMaterial C 
   Where R.materialnumber = '6A100045' 
   And R.materialnumber = C.number 
Union All 
   Select 
        A1.upmaterialnumber,
	A1.qty,A1.subPartNo,
	B1.SumDrawingNumber
   From ERP_D_BillOfMaterial B1,
       (Select 
	     A.upmaterialnumber, 
	     A.qty, 
	     A.materialnumber as subPartNo
        From ERP_D_MeterialRelation A 
	Left Join SubQuery B ON A.upmaterialnumber = B.subPartNo) A1
   Where A1.subPartNo = B1.Number)
Select * From SubQuery


2. 【Oracle】"樹查詢"拼接語句如下:

Select  
      c.roleName as roleName,  
      c.menuName as menuName,  
      convert(varchar(5000),c.funName) as funName  
From (  
      Select  
	    roleName,  
	    (Select name as menuName From t_scl_func where code = supCode) as menuName, 
	    funName =  (stuff((
                 Select ','  b.funname 
		 From ( 
		       Select  
			    r.name as rolename, 
			    m.name as funname, 
			    m.code as code, 
			    m.parent as supCode 
		       From  
			    t_scl_role r, 
			    t_scl_role_func f, 
			    t_scl_func m  
		       Where r.id = f.role_id  
		       And f.func_code = m.code ) b 
		 Where b.rolename = a.rolename  
		 And b.supCode = a.supCode for xml path('')),1,1,'')) 
	From ( 
	     Select  
		   r.name as rolename, 
		   m.name as funname, 
		   m.code as code, 
		   m.parent as supCode 
	      From  
		   t_scl_role r, 
		   t_scl_role_func f, 
		   t_scl_func m  
	      Where r.id = f.role_id  
	      And f.func_code = m.code ) a 
	Group by rolename,supCode) c  
Where c.funname is Not Null Order by c.roleName;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章