2014-12-04 80 views
1

假設此表中包含以下數據。在Oracle中,如何處理以下使用過程的情況?

123 || MYNTRA || 345 || Flipkart 
123 || MYNTRA || 678 || Snapdeal 

In Table 1, 123 is PARENT whose Children are 345,678. There are 'N' no. of such Children to Parent 123. 

Now Assume that 123 has following 2 offers i.e Parent has 3 offers 
123 || Offer1_Myntra || Description_Offer1 
123 || Offer2_Myntra || Description_Offer2 

Now as Children are extended from Parent, Parent's Each offer SHOULD be in Children with SAME DATA (Not Even Mismatch of single space) 
i.e 

345 || Offer1_Myntra || Description_Offer1 
678 || Offer2_Myntra || Description_Offer2 

Also Order of occurrence of offers in Children may vary like as :() 

678 || Offer2_Myntra || Description_Offer2 
345 || Offer1_Myntra || Description_Offer1 

我想比較這些情況使用光標& for循環。 我想找出這個數據&顯示列之間的MISMATCH具有MISMATCH。 你能幫助邏輯&代碼?

回答

0

我會建議一些辦法,只能用類似下面

首先,我將命名列SQL查詢。 表1的列

parent_1 
site_1 
child_1 
site_2 

表2的列像下面

parent_1 
offer_1 
off_desc_1 

現在代碼將是

create table tmp_tab(parent_1 varchar2(50),child_1 varchar2(50),offer_1 varchar2(50),off_desc_1 varchar2(50)); 

Insert into tmp_tab 
select a.parent_1,a.child_1,b.offer_1,b.off_desc_1 
from table1 a 
join 
table2 b 
on a.parent_1 = b.paren_1 

這將給​​之間的交叉連接,因此結果將是

select * from tmp_tab; 

123||345 || Offer1_Myntra || Description_Offer1 
123||678 || Offer2_Myntra || Description_Offer2 
123||678 || Offer2_Myntra || Description_Offer2 
123||345 || Offer1_Myntra || Description_Offer1 

從上面我們可以很容易地消除像下面

delete from 
    tmp_tab a 
where 
    a.rowid > 
    any (select b.rowid 
    from 
     tmp_tab b 
    where 
     a.parent_1 = b.parent_1 
    and 
     a.child_1 = b.child_1 
    ) 
; 

,這將給你的重複期望的結果

相關問題