INFORMATION_SCHEMA.COLUMNS
से बनाएं
एक स्ट्रिंग तालिका करें जिसमें SQL शामिल है जिसे आप निष्पादित करना चाहते हैं, फिर एक बयान तैयार करें
उस स्ट्रिंग से और इसे निष्पादित करें।
हम जिस SQL का निर्माण करना चाहते हैं वह इस तरह दिखेगा:
SELECT 'column_a'
FROM table_name
WHERE `column_a` IS NOT NULL
HAVING COUNT(*)
UNION ALL
SELECT 'column_b'
FROM table_name
WHERE `column_b` IS NOT NULL
HAVING COUNT(*)
-- etc.
(कोई WHERE
को छोड़ सकता है खंड और स्थानापन्न COUNT(*)
COUNT(column)
. के लिए , लेकिन मैं सोचता हूं जो अनुक्रमित स्तंभों पर कम कुशल हो सकता है)।
यह निम्नलिखित का उपयोग करके किया जा सकता है:
SET group_concat_max_len = 4294967295;
SELECT GROUP_CONCAT(
' SELECT ',QUOTE(COLUMN_NAME),
' FROM table_name',
' WHERE `',REPLACE(COLUMN_NAME, '`', '``'),'` IS NOT NULL',
' HAVING COUNT(*)'
SEPARATOR ' UNION ALL ')
INTO @sql
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'table_name';
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
इसे sqlfiddle पर देखें ।