2013-02-04 30 views
15

संभव डुप्लिकेट:
mysql join query using like?एसक्यूएल एक और स्तंभ की तरह एक स्तंभ पर जुड़ें

मैं क्या करना चाहते हैं एक में शामिल होने के जहां एक स्तंभ एक और तालिका की स्तंभ से एक स्ट्रिंग है:

SELECT 
a.first_name, 
b.age 
FROM names a 
JOIN ages b 
ON b.full_name LIKE '%a.first_name%' 

क्या यह संभव है? मैं MySQL का उपयोग कर रहा हूँ। बेशक उपर्युक्त क्वेरी काम नहीं करेगी क्योंकि LIKE '% a.first_name%' केवल स्ट्रिंग a.first_name की तलाश करेगी, न कि कॉलम का वास्तविक मान।

+0

यदि आपके पास स्ट्रिंग की शुरुआत में% है, तो वह उस b.full_name कॉलम पर आपके पास मौजूद इंडेक्स का उपयोग करने में सक्षम नहीं होगा। अगर आपको यहां एक बड़ा डेटाबेस है तो बस आपको यह बताना होगा कि आपका प्रदर्शन भयानक होगा। – Jordan

+0

हालांकि आप जो भी मांगते हैं वह आपको मिलेगा। तो यदि पहला नाम जो है, तो आपको जोसेफिन, जोसिलिन, जॉबोब, जॉडी, जोसेफ इत्यादि मिलेंगे .. – xQbert

उत्तर

24

आपको केवल तारों को संयोजित करने की आवश्यकता है, आप एक खोज और प्रतिस्थापन भी कर सकते हैं।

SELECT 
    a.first_name, 
    b.age 
FROM names a 
JOIN ages b 
ON b.full_name LIKE '%' + a.first_name + '%' 
+5

'ON b.full_name जैसे CONCAT ('% ', a.first_name,'% ') का उपयोग करके मेरे लिए बेहतर काम करता है। – Alcalyn

13

आप concat का उपयोग कर सकते हैं:

SELECT 
    a.first_name, 
    b.age 
FROM 
    names a JOIN ages b 
    ON b.full_name LIKE CONCAT('%', a.first_name, '%') 

या भी LOCATE, कि b.full_name में a.first_name की पहली आवृत्ति की स्थिति प्रस्तुत करती है:

SELECT 
    a.first_name, 
    b.age 
FROM 
    names a JOIN ages b 
    ON LOCATE(a.first_name, b.full_name) 

अगर वहाँ एक मैच है, में शामिल होने के सफल होगा।

+1

LOCATE() दिलचस्प है, क्या यह स्ट्रिंग b.full_name में मौजूद होने पर और गैर-शून्य मान लौटाएगा, और अन्यथा झूठी वापसी होगी? –

+0

@DonnyP पता 0 अगर कोई मैच नहीं है, या पहले नाम की पहली घटना की स्थिति 0 वापस आ जाएगी। 0 को गलत के बराबर माना जाता है, यदि मान है> = 1 इसे सही माना जाता है – fthiella

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