如何查询数据表中存在多种不同取值的列?
需求概述
找出数据表中存在2种及以上不同取值的列名,以示例表(假设表名为your_table)为例,最终需输出D、E这类满足条件的列。
示例数据表
| A | B | C | D | E |
|---|---|---|---|---|
| 1 | 2 | 3 | 44 | 32 |
| 1 | 2 | 3 | 45 | 33 |
| 1 | 2 | 3 | 46 | 34 |
| 1 | 2 | 3 | 47 | 35 |
解决方案
方法1:逐列聚合判断(适合列数较少场景)
直接对每列计算不同值的数量,筛选出数量≥2的列:
SELECT 'A' AS column_name FROM your_table GROUP BY A HAVING COUNT(DISTINCT A) >= 2 UNION ALL SELECT 'B' AS column_name FROM your_table GROUP BY B HAVING COUNT(DISTINCT B) >= 2 UNION ALL SELECT 'C' AS column_name FROM your_table GROUP BY C HAVING COUNT(DISTINCT C) >= 2 UNION ALL SELECT 'D' AS column_name FROM your_table GROUP BY D HAVING COUNT(DISTINCT D) >= 2 UNION ALL SELECT 'E' AS column_name FROM your_table GROUP BY E HAVING COUNT(DISTINCT E) >= 2;
执行后将直接返回所有符合条件的列名(示例中为D、E)。
方法2:动态生成查询(适合列数较多场景)
利用数据库信息模式自动生成判断语句(以MySQL为例),避免手动逐列编写:
SELECT CONCAT( 'SELECT ''', COLUMN_NAME, ''' AS column_name FROM your_table GROUP BY ', COLUMN_NAME, ' HAVING COUNT(DISTINCT ', COLUMN_NAME, ') >= 2' ) AS sql_query FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '你的数据库名' AND TABLE_NAME = 'your_table';
执行该语句会得到每列对应的判断SQL,将结果拼接时加入UNION ALL后执行,即可得到目标列名。
方法3:单表扫描一次性判断(简洁版)
通过一次表扫描完成所有列的判断,并将结果聚合为字符串(以MySQL为例):
SELECT GROUP_CONCAT( CASE WHEN COUNT(DISTINCT A) >= 2 THEN 'A' WHEN COUNT(DISTINCT B) >= 2 THEN 'B' WHEN COUNT(DISTINCT C) >= 2 THEN 'C' WHEN COUNT(DISTINCT D) >= 2 THEN 'D' WHEN COUNT(DISTINCT E) >= 2 THEN 'E' END SEPARATOR ', ' ) AS columns_with_multiple_values FROM your_table;
示例中会直接返回D, E。
内容的提问来源于stack exchange,提问作者Zain
相关产品推荐
相关产品推荐

