2011-04-20 15 views
92

के साथ चयन करें मैं इसे अपने दिमाग में संकलित करने की कोशिश कर रहा हूं .. मेरे पास प्रथम नाम और अंतिम नाम फ़ील्ड है और मेरे पास "बॉब जोन्स" या "बॉब माइकल जोन्स" और कई अन्य जैसे स्ट्रिंग हैं।MySQL CONCAT स्थिति

बात यह है कि मैं उपनाम

में उदाहरण के लिए firstname में बॉब, और माइकल जोन्स तो मैं

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
    FROM users 
WHERE firstlast = "Bob Michael Jones" 

कोशिश कर रहा हूँ लेकिन यह अज्ञात स्तंभ "firstlast" कहते हैं .. क्या कोई मदद कर सकता है?

उत्तर

149

उपनाम आप क्वेरी के उत्पादन के लिए कर रहे हैं दे - वे क्वेरी के भीतर ही उपलब्ध नहीं हैं।

आप अभिव्यक्ति को दोहरा सकते हैं या तो:

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones" 

या क्वेरी

SELECT * FROM (
    SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
    FROM users) base 
WHERE firstLast = "Bob Michael Jones" 
+5

यह उत्तर के रूप में सेट किया गया था। –

+0

थोड़ी देर के बाद, मैं कह सकता हूं कि मैं इसे बेहतर उत्तर –

+0

@Alex के रूप में उपयोग करने के लिए सहमत हूं यदि आप ऐसा करना चाहते हैं तो आप एक अलग उत्तर चुन सकते हैं –

11
SELECT needefield, CONCAT(firstname, ' ',lastname) as firstlast 
FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones" 
7

प्रयास करें:

SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
    FROM users 
WHERE CONCAT(firstname, ' ', lastname) = "Bob Michael Jones" 

आपका उर्फ ​​firstlast जहां क्वेरी के खंड में उपलब्ध नहीं है जब तक आप एक उप-चयन के रूप में क्वेरी से करते हैं।

33

इस प्रयास करें:

SELECT * 
    FROM (
     SELECT neededfield, CONCAT(firstname, ' ', lastname) as firstlast 
     FROM users 
    ) a 
WHERE firstlast = "Bob Michael Jones" 
+0

मेरे लिए एकदम सही काम करता है डाल दिया, बहुत बहुत शुक्रिया :) और कोड में पाठ डालने के लिए धन्यवाद करना चाहते हैं, मैं भूल गया –

7

वहाँ CONCAT अभिव्यक्ति दोहरा या सबक्वेरी उपयोग करने का विकल्प है लपेट दें। आप HAVING खंड का उपयोग कर सकते हैं, जो कॉलम उपनामों को पहचानता है।

SELECT 
    neededfield, CONCAT(firstname, ' ', lastname) AS firstlast 
FROM 
    users 
HAVING firstlast = "Bob Michael Jones" 

यहां एक काम कर रहे SQL Fiddle है।

+0

यह सुनिश्चित नहीं है कि क्यों क्लॉज अधिक ध्यान आकर्षित नहीं कर रहा है। यह वर्चुअल कॉलम नाम के प्रत्यक्ष उपयोग की अनुमति देता है।क्या होने वाले खंड में अधिक उपर है? – Paul

+0

@ पॉल को क्लॉज निष्पादित करने के अंत में लागू किया गया है ताकि हम कुल कार्यों (जैसे MAX()) पर स्थिति निर्धारित करने के लिए इसका उपयोग कर सकें। खंड होने से इंडेक्स का उपयोग नहीं किया जा सकता है, इसलिए यह धीमा है। –

8

CONCAT_WS() का उपयोग करें।

SELECT CONCAT_WS(' ',firstname,lastname) as firstlast FROM users 
WHERE firstlast = "Bob Michael Jones"; 

पहला तर्क बाकी तर्कों के लिए विभाजक है।

+0

तो यह 'CONCAT_WS ('', ..' होना चाहिए –

-2

1.I है दो तालिकाओं table1 और table2 2.In table1 FIELDNAME cert_no है और table2 FIELDNAME में cer1,cert2,cert3,cert4,cert5 3. मूल्य जो table2 (cer1,cert2,cert3,cert4,cert5) में नहीं था अकेले 4. यदि दोनों तालिका का मान समान है प्रदर्शित करना चाहते हैं केवल transfile_file

क्वेरी प्रदर्शित करने के मैं क्या

SELECT * FROM table1 WHERE folio = 'KCA00619' AND cm_flag !='X' AND certificate_no NOT IN 
(SELECT CONCAT(certno1,certno2,certno3,certno4,certno5,certno6,certno7,certno8,certno9,certno10) 
FROM table2 WHERE tofolio = '123456') 
संबंधित मुद्दे