मुझे यकीन नहीं है कि इसे कैसे समझाया जाए और मैं एसक्यूएल का उपयोग नहीं कर रहा हूं..यह मेरी क्वेरी है जो काम नहीं कर रही है
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 का उपयोग कर रहा हूँ
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
यह पता लगाना थोड़ा कठिन है कि आपके पास कौन-से फ़ील्ड हैं और कौन-सी तालिकाएँ हैं, लेकिन मैं इसे आज़माऊँगा। समस्या यह है कि ज्यादातर लोग सोचते हैं कि आप आईएन ऑपरेटर का उपयोग करने के तरीके पर पाठ्यपुस्तक के उत्तर की तलाश में हैं, लेकिन आप कुछ अधिक जटिल हैं।
मुझे लगता है कि आप जो चाहते हैं उसे करने का सबसे आसान तरीका है:
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
where ao_codeid = 'DJ' OR ao_codeid = 'E' OR ao_codeid = 'A'
या फिर डीजे रिकॉर्ड ढूंढे तो बाकी 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 पर एक अद्वितीय बाधा हो।
उन लोगों की सूची प्राप्त करने का प्रयास कर रहा है जो तालिका में हैं ao_addrid और उनका ao_codeid 'DJ' और 'E' और 'A' है
आपका जहां क्लॉज उपयोग करता है और जहां इसका उपयोग किया जाना चाहिए या, आईएन पर, अगर मैं आपके प्रश्न को समझ गया हूं, जो बहुत स्पष्ट रूप से नहीं है।
where ao_codeid in ('DJ','E','A')
SQL के साथ काम करते समय आपको अपने AND और अपने OR पर बहुत ध्यान देना होता है जब आप समस्या को एक प्रश्न में अनुवाद करने से पहले रोज़मर्रा की अंग्रेजी (या जो भी प्राकृतिक भाषा बोलते हैं) में समस्या को परिभाषित करने का प्रयास कर रहे हों।
संबंधित सवाल
नए सवाल
mysql
MySQL एक फ्री, ओपन सोर्स रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDBMS) है जो स्ट्रक्चर्ड क्वेरी लैंग्वेज (SQL) का उपयोग करता है। इस टैग को अन्य DBs जैसे SQL Server, SQLite आदि के लिए उपयोग न करें। वे विभिन्न DB हैं जो सभी डेटा का प्रबंधन करने के लिए SQL की अपनी बोलियों का उपयोग करते हैं।