Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

एसक्यूएल में टुपल्स के समूहों की तुलना कैसे करें

कुछ इस तरह

create table t1 (group_id varchar2(20), value varchar2(20));
create table t2 (group_id varchar2(20), value varchar2(20));

insert into t1 values ('A','FOO');
insert into t1 values ('A','BAR');
insert into t1 values ('X','HHH');
insert into t1 values ('X','ZOO');
insert into t2 values ('C','FOO');
insert into t2 values ('C','BAR');
insert into t2 values ('B','ZOO');


select t1.group_id t1_group,t2.group_id t2_group, 
      --t1.all_val, t2.all_val, 
       case when t1.all_val = t2.all_val then 'match' else 'no match' end coll_match
from 
  (select 'T1' tab_id, group_id, collect(value) all_val, 
          min(value) min_val, max(value) max_val, count(distinct value) cnt_val 
  from t1 group by group_id) t1
full outer join
  (select 'T2' tab_id, group_id, collect(value) all_val, 
          min(value) min_val, max(value) max_val, count(distinct value) cnt_val 
  from t2 group by group_id) t2
on t1.min_val = t2.min_val and t1.max_val = t2.max_val and t1.cnt_val = t2.cnt_val
/

मैंने प्रत्येक समूह में न्यूनतम, अधिकतम और अलग-अलग मानों की संख्या के आधार पर प्रारंभिक उन्मूलन किया है, जो बड़े डेटासेट के साथ मदद करेगा। यदि डेटासेट काफी छोटे हैं, तो हो सकता है कि आपको उनकी आवश्यकता न हो।

यह आपको मैच बताता है। जिन समूहों में कोई मेल नहीं है, उन्हें खोजने के लिए आपको बस इसे एक अतिरिक्त कदम उठाने की जरूरत है

select t1_group
from
(
  select t1.group_id t1_group,t2.group_id t2_group, 
        --t1.all_val, t2.all_val, 
         case when t1.all_val = t2.all_val then 'match' end coll_match
  from 
    (select 'T1' tab_id, group_id, collect(value) all_val
    from t1 group by group_id) t1
  cross join
    (select 'T2' tab_id, group_id, collect(value) all_val
    from t2 group by group_id) t2
)
group by t1_group
having min(coll_match) is null
/

select t2_group
from
(
  select t1.group_id t1_group,t2.group_id t2_group, 
        --t1.all_val, t2.all_val, 
         case when t1.all_val = t2.all_val then 'match' end coll_match
  from 
    (select 'T1' tab_id, group_id, collect(value) all_val
    from t1 group by group_id) t1
  cross join
    (select 'T2' tab_id, group_id, collect(value) all_val
    from t2 group by group_id) t2
)
group by t2_group
having min(coll_match) is null
/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं ओरेकल के डेटाटाइप के स्ट्रिंग मान को उसके कोड से कैसे निर्धारित कर सकता हूं?

  2. R12.2/R12.1 अपग्रेड के लिए शीर्ष AWR उपयोगी प्रश्न

  3. Oracle SQL पेयर राइट लेफ्ट सीक्वेंशियल नंबर विद आइडेंटिफायर

  4. ओरेकल और पोस्टग्रेएसक्यूएल के बीच अलग-अलग डिफ़ॉल्ट ऑर्डरिंग

  5. ओरेकल में नेस्टेड लेनदेन का उपयोग करना