2011-08-06 10 views
26

मेरे पास दो चयन हैं जो मैं वर्तमान में यूनियन के रूप में सफलतापूर्वक चल रहा हूं।MYSQL यूनियन DISTINCT

(SELECT a.user_id,a.updatecontents as city,b.country 
FROM userprofiletemp AS a 
LEFT JOIN userattributes AS b ON a.user_id=b.user_id 
WHERE typeofupdate='city') 

UNION DISTINCT 

(SELECT a.user_id,c.city,c.country 
FROM userverify AS a 
LEFT JOIN userlogin AS b ON a.user_id=b.user_id 
LEFT JOIN userattributes AS c ON a.user_id=c.user_id 
WHERE b.active=1 AND a.verifycity=0); 

परिणाम इस तरह वापस आ:

100 Melbourne Australia 
200 NewYork America 
300 Tokyo Japan 
100 Sydney Australia 

पकड़ क्वेरी डुप्लिकेट user_id लाएगा (इस मामले में 100 में) है। पहली क्वेरी में विवरण मेरे लिए उदाहरण लेते हैं और यदि उपयोगकर्ता क्वेरी को दूसरी क्वेरी में दोहराया जाता है तो मुझे इसकी आवश्यकता नहीं है।

क्या यूनियन को कॉलम पर DISTINCT होने का कोई तरीका है? इस मामले में user_id? क्या उपर्युक्त कॉल करने का कोई तरीका है और डुप्लिकेट user_id प्राप्त नहीं है - दूसरा ड्रॉप करें। क्या मुझे क्वेरी को अलग-अलग लिखना चाहिए और यूनियन का उपयोग नहीं करना चाहिए। वास्तव में इसे एक प्रश्न के रूप में चाहते हैं - यदि आवश्यक हो तो मैं डुप्लिकेट को बाहर निकालने के लिए SELECT और PHP का उपयोग कर सकता हूं।

THX एडम

उत्तर

28

नहीं, निर्दिष्ट नहीं कर सकते जो सटीक क्षेत्र आप के साथ अलग करने की जरूरत है। यह केवल पूरी पंक्ति के साथ काम करता है।

आपकी समस्या के रूप में - बस अपनी क्वेरी एक सबक्वेरी बनाने के लिए और बाहरी एक GROUP BYuser_id

SELECT * FROM 
(SELECT a.user_id,a.updatecontents as city,b.country 
FROM userprofiletemp AS a 
LEFT JOIN userattributes AS b ON a.user_id=b.user_id 
WHERE typeofupdate='city') 

UNION DISTINCT 

(SELECT a.user_id,c.city,c.country 
FROM userverify AS a 
LEFT JOIN userlogin AS b ON a.user_id=b.user_id 
LEFT JOIN userattributes AS c ON a.user_id=c.user_id 
WHERE b.active=1 AND a.verifycity=0) x 
GROUP BY user_id 
+0

कोई मौका तुम मुझे सबक्वेरी और बाहरी एक समूह द्वारा के साथ सही दिशा में एक धक्का दे सकते में यूज़र आईडी? पहले ऐसा नहीं किया है, परीक्षण कर रहा है लेकिन वहां जल्दी नहीं हो रहा है ... – Adam

+0

@Adam: एक उत्तर अपडेट किया गया। इस तरह क्वेरी कैसी दिख सकती है, लेकिन यह जांचने का कोई मौका नहीं है कि यह सही है या नहीं, – zerkms

+0

यदि मैं यह जानना चाहता हूं कि 'x' में 'x GROUP BY user_id' का अर्थ है (मैंने भी एक ऑर्डर पढ़ा है ' द्वारा ... 'कहीं कहीं), आप किस दस्तावेज़/ट्यूटोरियल/लिंक की सिफारिश करेंगे? –

1
(SELECT a.user_id,a.updatecontents as city,b.country 
FROM userprofiletemp AS a 
LEFT JOIN userattributes AS b ON a.user_id=b.user_id 
WHERE typeofupdate='city') 

UNION ALL 

(SELECT a.user_id,c.city,c.country 
FROM userverify AS a 
LEFT JOIN userlogin AS b ON a.user_id=b.user_id 
LEFT JOIN userattributes AS c ON a.user_id=c.user_id 
WHERE b.active=1 AND a.verifycity=0 
    AND a.user_id NOT IN 
     (SELECT user_id 
     FROM userprofiletemp 
     WHERE typeofupdate='city' 
    ) 
); 
संबंधित मुद्दे