मुझे यकीन नहीं है कि इसे कैसे समझाया जाए और मैं एसक्यूएल का उपयोग नहीं कर रहा हूं..यह मेरी क्वेरी है जो काम नहीं कर रही है

select * from ao_addrcodes 
JOIN a1_addrs on a1_addrid = ao_addrid left Join a2_name on a2_addrid = ao_addrid 
where ao_codeid = 'DJ' and 'E' and 'A'

उन लोगों की सूची प्राप्त करने का प्रयास कर रहा है जो तालिका में हैं ao_addrid और उनका ao_codeid 'DJ' और 'E' और 'A' है

तो फ्रेड 3 बार तालिका में होगा। उसका a2_addrid वही होगा लेकिन क्या उसका ao_codeid अलग होगा

प्रत्येक व्यक्ति के पास एकाधिक रिकॉर्ड होते हैं यदि उनके पास एकाधिक ao_codeid 's . हैं

मदद?

संपादित करें

Ao_codeid, a2_addrid

'DJ', '525'
'E', '525'
'A', '525'
'DJ', '52'
'A', '25'
'E', '25'

तो उपरोक्त डेटा से मैं केवल उपयोगकर्ता 525 को दिखाना चाहता हूं। 52 या 25 नहीं।

मैं MySQL का उपयोग कर रहा हूँ

0
Beginner 19 जुलाई 2011, 15:50

5 जवाब

सबसे बढ़िया उत्तर

यदि आप SQL सर्वर का उपयोग कर रहे हैं, तो आपका WHERE कथन गलत है:

SELECT    *
FROM      ao_addrcodes
JOIN      a1_addrs ON a1_addrid = ao_addrid
LEFT JOIN a2_name ON a2_addrid = ao_addrid 
WHERE     ao_codeid IN('DJ', 'E', 'A')

या आप इसे इस तरह कर सकते हैं

WHERE     ao_codeid = 'DJ'
OR        ao_codeid = 'E'
OR        ao_codeid = 'A'

1 संपादित करें

मैं ऐसा कुछ करूंगा:

--Create a CTE that counts eligible records
WITH CodeCount AS
(
    SELECT    ID, --this represents your 525 data
              COUNT(*) AS CodeCount
    FROM      [your table]
    WHERE     code IN('DJ', 'E', 'A')
    GROUP BY  ID
)

SELECT        *
FROM          [your table]
INNER JOIN    CodeCount ON [your table].ID = CodeCount.ID
WHERE         CodeCount = 3

2 संपादित करें

चूंकि आपने अपनी पोस्ट को यह कहने के लिए संपादित किया है कि आप MySQL का उपयोग कर रहे हैं, यह मेरा समाधान होगा:

SELECT    *
FROM      ao_addrcodes
JOIN      a1_addrs ON a1_addrid = ao_addrid
LEFT JOIN a2_name ON a2_addrid = ao_addrid
INNER JOIN (
                SELECT       ID,
                COUNT(*) AS  EligibleCount
                FROM         ao_addrcodes
                WHERE        ao_codeid IN('DJ', 'E', 'A')
                GROUP BY     ID
            ) a ON a.ID = ao_addrcodes.ID
WHERE         a.EligibleCount = 3
1
James Hill 19 जुलाई 2011, 16:40

यह पता लगाना थोड़ा कठिन है कि आपके पास कौन-से फ़ील्ड हैं और कौन-सी तालिकाएँ हैं, लेकिन मैं इसे आज़माऊँगा। समस्या यह है कि ज्यादातर लोग सोचते हैं कि आप आईएन ऑपरेटर का उपयोग करने के तरीके पर पाठ्यपुस्तक के उत्तर की तलाश में हैं, लेकिन आप कुछ अधिक जटिल हैं।

मुझे लगता है कि आप जो चाहते हैं उसे करने का सबसे आसान तरीका है:

SELECT * 
FROM a2_name
WHERE EXISTS (
  SELECT COUNT(DISTINCT ao_codeid) FROM ao_addrcodes 
    JOIN a1_addrs on a1_addrid = ao_addrid
    LEFT JOIN a2_name on a2_addrid = ao_addrid 
  WHERE ao_codeid IN ('DJ', 'E', 'A') AND a2_addrid = ao_addrid
  HAVING COUNT(DISTINCT ao_codeid) = 3
)

या कम जटिल होने के लिए और अभी भी जो आप चाहते हैं वह कर रहे हैं (लेकिन मुझे उन फ़ील्ड के बारे में निश्चित नहीं है जिन्हें आप वापस करना चाहते हैं, बस a2_name.name को उन सभी फ़ील्ड की सूची के साथ बदलें जिन्हें आप वापस करना चाहते हैं क्योंकि आपकी स्कीमा आपूर्ति नहीं की गई है:

SELECT a2_name.name 
FROM ao_addrcodes 
  JOIN a1_addrs on a1_addrid = ao_addrid
  LEFT JOIN a2_name on a2_addrid = ao_addrid 
WHERE ao_codeid IN ('DJ', 'E', 'A')
GROUP BY a2_name.name
HAVING COUNT(DISTINCT ao_codeid) = 3
1
Seph 19 जुलाई 2011, 16:25
where ao_codeid = 'DJ' OR ao_codeid = 'E' OR ao_codeid = 'A'
0
Piotr Müller 19 जुलाई 2011, 15:53

या फिर डीजे रिकॉर्ड ढूंढे तो बाकी 2 की जांच करें?

SELECT * FROM ao_addrcodes a 
JOIN a1_addrs ON a1_addrid = a.ao_addrid 
LEFT JOIN a2_name ON a2_addrid = a.ao_addrid 
 WHERE ao_codeid = 'DJ' 
 AND EXISTS (SELECT * FROM ao_addrcodes x WHERE ao_codeid = 'E' and x.ao_addrid= a.ao_addrid)  AND 
 AND EXISTS (SELECT * FROM ao_addrcodes x WHERE ao_codeid = 'A' and x.ao_addrid= a.ao_addrid)

नोट: अन्य गणना आधारित समाधान केवल तभी काम करेंगे जब ao_addrid & ao_codeid पर एक अद्वितीय बाधा हो।

0
Kevin Burton 19 जुलाई 2011, 23:59

उन लोगों की सूची प्राप्त करने का प्रयास कर रहा है जो तालिका में हैं ao_addrid और उनका ao_codeid 'DJ' और 'E' और 'A' है

आपका जहां क्लॉज उपयोग करता है और जहां इसका उपयोग किया जाना चाहिए या, आईएन पर, अगर मैं आपके प्रश्न को समझ गया हूं, जो बहुत स्पष्ट रूप से नहीं है।

              where ao_codeid in ('DJ','E','A')

SQL के साथ काम करते समय आपको अपने AND और अपने OR पर बहुत ध्यान देना होता है जब आप समस्या को एक प्रश्न में अनुवाद करने से पहले रोज़मर्रा की अंग्रेजी (या जो भी प्राकृतिक भाषा बोलते हैं) में समस्या को परिभाषित करने का प्रयास कर रहे हों।

-2
Tim 19 जुलाई 2011, 15:55