2011-02-15 14 views
14

मेरे पास maintable नामक एक तालिका है जिसमें 3 कॉलम हैं: id, userid1 और userid2मुख्य तालिका में मानों के आधार पर किसी अन्य तालिका से दो अतिरिक्त कॉलम का चयन कैसे करें?

users नाम की एक और तालिका userid द्वारा की जाती है, और name को कॉलम के रूप में रखा जाता है।

मैं लाइनों के साथ कुछ चुनना चाहता हूं:

SELECT maintable.*, users.name AS username1, users.name AS username2 
FROM maintable, users 
WHERE ... 

असल में मैं maintable पंक्ति में सभी कॉलम प्राप्त करना चाहता हूं, और अंत में दो कॉलम जोड़ना चाहता हूं जो userid1 के लिए नाम खींचेंगे और usersusers तालिका से।

मुझे यकीन है कि इस तरह की क्वेरी के लिए कहां प्रारूप को प्रारूपित करना है।

उत्तर

16

आप उपयोगकर्ताओं के साथ दो बार में शामिल होने की जरूरत है:

SELECT m.*, u1.name, u2.name 
FROM maintable m 
INNER JOIN users u1 ON (m.userid1 = u1.userid) 
INNER JOIN users u2 ON (m.userid2 = u2.userid) 

आप के बारे में MySQL शामिल हों सिंटेक्स here दस्तावेज़ पढ़ सकते हैं।

+0

उन तालिका में किसी विशेष उपयोगकर्ता के लिए केवल एक ही प्रविष्टि है क्या होगा अगर? मुझे लगता है कि बाएं शामिल होना पसंद करेंगे। – Chandu

+0

@Cybernate: अगर ऐसी बात ('userid1' या' 'userid2' users' तालिका में मौजूद नहीं हो सकता है) मैं आपसे सहमत है। अन्यथा, मैं ** ** आंतरिक शामिल होना पसंद करूंगा **। –

+0

मुझे नहीं लगता कि तालिका में userid1 और userid2 नाम से दो कॉलम हैं। यह उपयोगकर्ता उपयोगकर्ता नाम से सिर्फ एक कॉलम है। – Chandu

4

कुछ इस तरह,

select m.*, 
(select u1.name from users as u1 where m.userid1 = u1.userid) as username1, 
(select u2.name from users as u2 where m.userid2 = u2.userid) as username2 
from 
maintable as m 
+0

उपकुमारियों में उपयोगकर्ता तालिकाओं को उपनाम करना न भूलें। – ryebr3ad

+0

या .. मुझे अभी पता चला। अंकन के लिए धन्यवाद। – Paulraj

+0

तो क्या वहां 'रखरखाव' नाम वाली एक तालिका है या यह एक कस्टम टेबल है? –

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

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