MySQL CONCAT कंडीशन के साथ चयन करें


116

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

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

इसलिए मैं कोशिश कर रहा हूँ

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

लेकिन यह कहता है कि अज्ञात कॉलम "फर्स्टलैंड" .. क्या कोई कृपया मदद कर सकता है?

जवाबों:


177

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

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

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
यह उत्तर के रूप में सेट करना था।
अरुण किल्लू

थोड़ी देर बाद, मैं कह सकता हूं कि मैं इसे बेहतर उत्तर के रूप में उपयोग करने के लिए सहमत हूं
एलेक्स के

@ यदि आप ऐसा करना चाहते हैं तो आप एक अलग उत्तर का चयन कर सकते हैं
जिपसेटस

1
कई पंक्तियों के साथ एक भारी मेज के लिए, मुझे लगता है कि "लपेटो क्वेरी" संस्करण का उपयोग करना नासमझ होगा।
फंदी सुसंतो

34

इसे इस्तेमाल करे:

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

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


8

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

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

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


तो यह होना चाहिएCONCAT_WS(' ', ..
एलेक्स के

7

प्रयत्न:

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

जब तक आप क्वेरी को उप-चयन के रूप में नहीं करते हैं, तब तक आपका उपनाम प्रथम खंड क्वेरी के खंड में उपलब्ध नहीं होता है।


7

CONCATअभिव्यक्ति को दोहराने या उपश्रेणियों का उपयोग करने का एक विकल्प है । आप HAVINGक्लॉज का उपयोग कर सकते हैं , जो स्तंभ उपनामों को पहचानता है।

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

यहाँ एक कार्यशील SQL Fiddle है


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

@Paul में क्‍लॉज क्‍लीजिंग के अंत में लागू किया गया है, इसलिए हम इसे एग्‍जीक्‍यूटिव फंक्‍शन (जैसे MAX ()) पर कंडीशन सेट करने के लिए उपयोग कर सकते हैं। खण्ड होने से सूचकांक का उपयोग नहीं किया जा सकता है इसलिए यह धीमा है।
मुस्तफा वतनपुर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.