2014-04-28 4 views
12

हम * कीवर्ड का उपयोग करके MySQL में क्यों सम्मिलित नहीं हो सकते?MySQL सभी कॉलम को सम्मिलित करना

SELECT concat(*) FROM table 

या

SELECT group_concat(*) FROM table 

क्या कोई अन्य तरीका है जिससे हम स्पष्ट रूप से कॉलम नाम का उपयोग किए बिना एक स्तंभ में मानों यहां पहुंच सकता है?

+3

ऐसी कार्यक्षमता के लिए व्यावहारिक उपयोग क्या होगा? –

+2

कॉलम की सूची प्राप्त करने के लिए आप 'info_schema.columns' से पूछ सकते हैं और उन्हें स्वयं क्वेरी में डाल सकते हैं। –

+0

खैर, मान लीजिए कि मेरे पास 100 कॉलम हैं और वे सभी को अल्पविराम से अलग स्ट्रिंग के साथ संयोजित करना चाहते हैं। मैन्युअल रूप से 100 कॉलम नाम दर्ज करने के लिए काफी कुछ काम होगा। लेकिन फिर भी पहली जगह * कीवर्ड क्यों है? – Blub

उत्तर

19

एक तालिका के सभी कॉलम जोड़ के लिए, आपको * कीवर्ड का उपयोग नहीं कर सकते हैं, लेकिन आप स्पष्ट रूप से सभी स्तंभों को सूचीबद्ध करने की आवश्यकता:

SELECT CONCAT(col1, col2, col3, ....) 
FROM yourtable 

या आप CONCAT_WS उपयोग करने के लिए है कि शून्य मान को छोड़ देगा चाहते हो सकता है:

SELECT CONCAT_WS(',', col1, col2, col3, ....) 
FROM yourtable 

यदि आप मैन्युअल रूप से सभी कॉलम नाम निर्दिष्ट नहीं करना चाहते हैं, तो आप एक डायनेमिक क्वेरी का उपयोग कर सकते हैं। इस क्वेरी अपनी तालिका के सभी कॉलम नामों में वापस आ जाएगी:

SELECT `column_name` 
FROM `information_schema`.`columns` 
WHERE `table_schema`=DATABASE() 
     AND `table_name`='yourtable'; 

और group_concat का उपयोग कर आप सभी कॉलम नामों की सूची प्राप्त कर सकते हैं:,

GROUP_CONCAT(CONCAT('`', column_name, '`')) 

उद्धृत एक अल्पविराम से अलग प्रारूप में:

`col1`,`col2`,`col3`,`col4`,... 

तो अब हमारे पास हमारे प्रश्नों को द्विपक्षीय रूप से बनाने के लिए सभी तत्व हैं:

SELECT 
    CONCAT(
    'SELECT CONCAT_WS(\'\',', 
    GROUP_CONCAT(CONCAT('`', column_name, '`') ORDER BY column_name), 
    ') AS all_columns FROM yourtable;') 
FROM `information_schema`.`columns` 
WHERE `table_schema`=DATABASE() 
     AND `table_name`='yourtable' 
INTO @sql; 

इस क्वेरी की तरह कुछ करने के लिए @sql स्ट्रिंग सेट हो जाएगा:

SELECT CONCAT_WS('', col1, col2, col3, ....) AS all_columns FROM yourtable 

और इस कोड को निष्पादित होगा:

PREPARE stmt FROM @sql; 
EXECUTE stmt; 

कृपया बेला here देखते हैं।

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