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

मैं एक ORA-01427 त्रुटि को कैसे हल कर सकता हूं (एकल-पंक्ति सबक्वेरी एक से अधिक पंक्ति देता है)?

आपको त्रुटि मिल रही है क्योंकि db2.CENSUS . में एक से अधिक पंक्तियाँ मौजूद हैं uid . के कम से कम मान के लिए . (और भी हो सकते हैं।) आप यह पता लगा सकते हैं कि uid . के कौन से मान हैं निम्न कार्य करके समस्या उत्पन्न कर रहे हैं:

SELECT uid, COUNT(*)
  FROM db2.census
 GROUP BY uid
HAVING COUNT(*) > 1;

उस समय आप कई काम कर सकते हैं। आप अतिरिक्त पंक्तियों को हटा सकते हैं (हो सकता है कि बहुत अधिक नहीं हैं और आप उन्हें वैसे भी नहीं चाहते हैं) और अपनी मूल क्वेरी की तरह अपडेट करें, या आप उस सबक्वेरी में एकत्रीकरण का उपयोग कर सकते हैं जिसका उपयोग आप अपडेट करने के लिए कर रहे हैं, जैसे:

update db1.CENSUS set (notes)
=
(
        select MAX(notes)
        from db2.CENSUS cen
        where  db1.CENSUS.uid = cen.uid

)
where headcount_ind = 'Y' and capture_FY = '2015';

इसके अलावा, आपकी क्वेरी के साथ जिस तरह से यह ऊपर है, अगर notes का संबंधित मान नहीं है db2.CENSUS . में db1.CENSUS.uid . के कुछ मान के लिए , db1.CENSUS.notes NULL पर सेट हो जाएगा . शायद यही वह व्यवहार है जो आप चाहते हैं? यदि नहीं, तो आपको निम्न जैसा कुछ चाहिए:

UPDATE db1.census c1
   SET c1.notes = ( SELECT max(c2.notes)
                      FROM db2.census c2
                     WHERE c2.uid = c1.uid )
 WHERE c1.headcount_ind = 'Y'
   AND c1.capture_FY = '2015'
   AND EXISTS ( SELECT 1 FROM db2.census c2
                 WHERE c2.uid = c1.uid );


  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 PDO-oci

  2. ओरेकल डेटाबेस:वर्णों द्वारा एक स्ट्रिंग को विभाजित करें

  3. System.Data.OracleClient को Oracle क्लाइंट सॉफ़्टवेयर संस्करण 8.1.7 या उच्चतर की आवश्यकता है

  4. Oracle सबक्वेरी में आदेश के बाद शीर्ष पंक्ति प्राप्त करें

  5. एचटीएमएल ईमेल में छवि एम्बेड करना