2011-01-28 5 views
6

यह काफी आसान हो सकता है कि मैं इस समय पेड़ों के लिए लकड़ी नहीं देख रहा हूं। ओरेकल में मैं तालिका ए से रिकॉर्ड्स का चयन कर रहा हूं जो तालिका ए की प्राथमिक कुंजी के आधार पर तालिका बी में शामिल हो जाता है। हालांकि तालिका बी में तालिका ए की प्राथमिक कुंजी से मेल खाने वाले कई रिकॉर्ड हो सकते हैं। यह मेरी क्वेरी को तालिका से डुप्लिकेट पंक्तियों को वापस करने का कारण बन रहा हैपीएल/एसक्यूएल - एक शामिल तालिका से एकल पंक्ति कैसे वापस करें

TableA    TableB 
_______    _________ 
1, Sec1    2, 11/01/2011 
2, Sec2    2 
3, Sec3    5, 10/01/2011 
4, Sec4    6, 10/01/2011 

Select A.SecID, A.SecName, B.DateSent from tableA A 
    inner join tableB B on A.SecID = B.SecID 

यह Sec2 के लिए 2 रिकॉर्ड लौटा रहा है - मैं इसे Sec2 के लिए केवल 1 रिकॉर्ड वापस जाने के लिए कैसे प्राप्त कर सकते हैं: ए नीचे मेरी क्वेरी का कटौती संस्करण है? मैंने अलग और अद्वितीय का उपयोग करने की कोशिश की है लेकिन फिर भी वही परिणाम मिलते हैं।

+0

माफी माँगने से पहले मैंने इसे सरल बना दिया। मुझे वास्तव में तालिका बी से दिनांक मूल्य की आवश्यकता है और साथ ही –

+2

दो रिकॉर्डों में से किस दिनांक का दिनांक है? – Quassnoi

+0

सबसे हाल की तारीख के साथ tableB में रिकॉर्ड। कुछ रिकॉर्ड में दिनांक मूल्य नहीं हो सकता है। –

उत्तर

12
SELECT secid, secname 
FROM tableA 
WHERE secid IN 
     (
     SELECT secid 
     FROM tableb 
     ) 

आप tableB से एक रिकार्ड के रूप में अच्छी तरह से की जरूरत है:

SELECT secid, secname, datesent 
FROM (
     SELECT a.secid, a.secname, b.datesent, ROW_NUMBER() OVER (PARTITION BY a.secid ORDER BY b.datesent DESC) AS rn 
     FROM tableA a 
     JOIN tableB b 
     ON  b.secid = a.secid 
     ) 
WHERE rn = 1 

ORDER BY खंड नियंत्रण b पर जो कई रिकॉर्ड की आप मिल जाएगा।

+0

चाल जिसने चाल की है :) –

0
SELECT DISTINCT a.secid, a.secname 
    FROM tableA a, tableB b 
WHERE a.secid = b.secid; 
2

आप केवल एक ही पंक्ति का चयन करने के लिए एक ग्रुप फ़ंक्शन का उपयोग कर सकते हैं:

SELECT A.SecID, A.SecName, max(B.DateSent) DateSent 
    FROM tableA A 
    JOIN tableB B on A.SecID = B.SecID 
GROUP BY A.SecID, A.SecName 
+0

हाय @ विन्सेंट धन्यवाद - मेरी पूर्ण क्वेरी में लगभग 40 फ़ील्ड हैं, इसलिए इसका मतलब है कि समूह को बी .डेट्सेंट को छोड़कर सभी फ़ील्ड जोड़ना, जब तक कोई अलग तरीका न हो। –

+0

यदि आपके पास बहुत सारे क्षेत्र हैं, तो क्वास्नोई का समाधान निश्चित रूप से जाने का तरीका है। –

0

समाधान सुझाव बहुत अच्छे हैं। ऐसे मामले हैं जब आप एक अलग तरीके से अलग-अलग दृष्टिकोण ले सकते हैं, जब तालिका में से एक तालिका की तुलना में बहुत बड़ी होती है और तालिका बी में विदेशी कुंजी कॉलम पर इंडेक्स की अनुपस्थिति होती है।

संबंधित मुद्दे