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

तालिका में सभी पंक्तियों के बीच सूची में सभी मानों से मेल खाने के लिए Oracle क्वेरी

Oracle सेटअप :

CREATE TABLE table_name ( ID, A, B ) AS
SELECT 1,    'a',     'a1' FROM DUAL UNION ALL
SELECT 2,    'b',     'b1' FROM DUAL UNION ALL
SELECT 3,    'a',     'a2' FROM DUAL UNION ALL
SELECT 4,    'c',     'a1' FROM DUAL UNION ALL
SELECT 5,    'b',     'b2' FROM DUAL;

क्वेरी - GROUP BY का उपयोग करें और COUNT( DISTINCT ... ) :

SELECT A
FROM   table_name
WHERE  B IN ( 'a1', 'a2' )      -- The items in the list
GROUP BY A
HAVING COUNT( DISTINCT b ) = 2; -- The number of items in the list

आउटपुट :

A
-
a

क्वेरी - सूची को गतिशील रूप से पास करना :

CREATE OR REPLACE TYPE stringlist IS TABLE OF VARCHAR2(10);
/

SELECT A
FROM   table_name
WHERE  B MEMBER OF :your_list
GROUP BY A
HAVING COUNT( DISTINCT B ) = CARDINALITY( :your_list );

जहां बाइंड वैरिएबल :your_list stringlist type प्रकार का है .

यदि सूची को एक सीमित स्ट्रिंग के रूप में पारित किया जाता है तो आप सीमांकित स्ट्रिंग्स को विभाजित करना प्रलेखन पृष्ठ इसे अलग करने के लिए। एक आसान PL/SQL फ़ंक्शन है। जो इसे एक संग्रह के रूप में लौटाएगा जिसे उपरोक्त क्वेरी में जोड़ा जा सकता है।

अपडेट करें :

SELECT A
FROM   table_name
GROUP BY A
HAVING COUNT( DISTINCT CASE WHEN b IN ( 'a1', 'a2' )     THEN b END ) = 2
AND    COUNT( DISTINCT CASE WHEN b NOT IN ( 'a1', 'a2' ) THEN b END ) = 0;

या

SELECT A
FROM   table_name
GROUP BY A
HAVING COUNT( DISTINCT CASE WHEN b MEMBER OF :your_list     THEN b END ) = CARDINALITY( :your_list )
AND    COUNT( DISTINCT CASE WHEN b NOT MEMBER OF :your_list THEN b END ) = 0;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में एक बाधा का नाम कैसे खोजें

  2. SQL - Oracle में आज की तारीख से दो महीने

  3. SSIS Varchar2 को DT_STR . में परिवर्तित करता है

  4. कई डेटा स्रोतों के साथ टॉमकैट 6/7 जेएनडीआई

  5. क्या BigQuery समर्थन डायनेमिक क्वेरी चलाने के लिए तत्काल आदेश निष्पादित करता है?