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

ओरेकल में एक विशिष्ट कॉलम से रिकॉर्ड प्राप्त करें

Oracle सेटअप :

CREATE TABLE table_name ( S_NO, id, Pid ) AS
SELECT 1, 123, 'PAQ123' FROM DUAL UNION ALL
SELECT 2, 433, 'WSD3FF' FROM DUAL UNION ALL  
SELECT 3, 565, 'PAS45E' FROM DUAL UNION ALL
SELECT 4, 123, 'PAQ123X' FROM DUAL UNION ALL
SELECT 5, 433, 'WSD3FFY' FROM DUAL UNION ALL
SELECT 6, 123, 'PAQ123Z' FROM DUAL;

क्वेरी :

SELECT *
FROM   (
  SELECT t.*,
         ( SELECT COUNT(*)
           FROM   table_name x
           WHERE  t.id = x.id
           AND    LENGTH( t.Pid ) < LENGTH( x.pid )
           AND    INSTR( x.Pid, t.Pid ) = 1 ) AS num_matches
  FROM   Table_name t
)
WHERE num_matches > 0;

आउटपुट :

      S_NO         ID PID     NUM_MATCHES
---------- ---------- ------- -----------
         1        123 PAQ123            2 
         2        433 WSD3FF            1 

यदि आप मैच प्राप्त करना चाहते हैं तो आप एक संग्रह का उपयोग कर सकते हैं:

CREATE TYPE stringlist AS TABLE OF VARCHAR2(100);
/

क्वेरी :

SELECT *
FROM   (
  SELECT t.*,
         CAST(
           MULTISET(
             SELECT PID
             FROM   table_name x
             WHERE  t.id = x.id
             AND    LENGTH( t.Pid ) < LENGTH( x.pid )
             AND    INSTR( x.Pid, t.Pid ) = 1
           )
           AS stringlist
         ) AS matches
  FROM   Table_name t
)
WHERE matches IS NOT EMPTY;

या (चूंकि मुझे यकीन नहीं है MULTISET 10g में है):

SELECT *
FROM   (
  SELECT t.*,
         CAST(
           ( 
             SELECT COLLECT( PID )
             FROM   table_name x
             WHERE  t.id = x.id
             AND    LENGTH( t.Pid ) < LENGTH( x.pid )
             AND    INSTR( x.Pid, t.Pid ) = 1
           )
           AS stringlist
         ) AS matches
  FROM   Table_name t
)
WHERE matches IS NOT EMPTY;

आउटपुट

      S_NO         ID PID     MATCHES 
---------- ---------- ------- ------------------------------------
         1        123 PAQ123  TEST.STRINGLIST('PAQ123X','PAQ123Z')
         2        433 WSD3FF  TEST.STRINGLIST('WSD3FFY')



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. java.sql.SQLException:ORA-01652:टेबलस्पेस TEMP में अस्थायी खंड को 128 तक बढ़ाने में असमर्थ (विस्तार करने के बाद भी)

  2. ऑरैकल संग्रहीत कार्यविधि में निर्देशिका से फ़ाइलों को हटाना

  3. एक ग्राहक की एक तालिका से दो अलग-अलग मानों को एक पंक्ति में कैसे संयोजित करें

  4. ओले-डीबी के लिए ऑरैकल प्रदाता के संस्करण की जांच कैसे करें। oraOLEDB.Oracle प्रदाता

  5. प्रतिबद्धता के बाद मेरे डीबी परिवर्तनों को कैसे रोलबैक करें?