Select 多个不同的列分别来自同一 table

Select multiple distinct columns from same table separately

让我们有这个示例数据:

+-------+---------+
| col1  | col2    |
+-------+---------+
|  111  | hello   |
|  222  | hello   |
|  111  | blabla  |
|  444  | there   |
|  555  | blabla  |
|  555  | there   |
+-------+---------+

我需要 SQL return 分别为每一列设置不同的值(作为过滤下拉值的提要)。 因此结果应该是:

+-------+---------+
| col1  | col2    |
+-------+---------+
|  111  | hello   |
|  222  | blabla  |
|  444  | there   |
|  555  |         |
+-------+---------+

结果不必采用这种格式;更重要的是我有不同的值以便于访问和迭代。

我得到的最近的是从这里:

select (SELECT group_concat(DISTINCT col1) FROM testtable) as col1, (SELECT group_concat(DISTINCT col2) FROM testtable) as col2;

这 returns:

+-----------------+-------------------+
| col1            | col2              |
+-----------------+-------------------+
| 111,222,444,555 | velo,hallo,blabla |
+-----------------+-------------------+

非常接近,如果没有更好的解决方案,我会选择这个;它不是最佳的,因为值是逗号分隔的,我需要拆分结果。

我也试过:

SELECT DISTINCT from col1,col2 FROM testtable;

这 return 是两列的不同值,不是我想要的。

另外:

select col1,col2 from testtable group by col1,col2;

其他地方建议的return不是我需要的,但是return每一列都是不同的:)

尝试

Select (SELECT DISTINCT col1 from testtable) AS col1, (SELECT DISTINCT col2 from testtable) AS col2;

我认为 group_concat 将逗号放入返回的 table。

您所问的一个问题是,从关系数据库的角度来看,您期望的结果集没有任何意义。一行数据中的每一列都应该与该行中的其他列有关系。

在我看来,解决此问题的最佳方法是 return 两个结果集并针对每个下拉框处理每个结果集:

SELECT DISTINCT column_1 FROM My_Table

SELECT DISTINCT column_2 FROM My_Table

如果这两列不相关,我还会研究为什么您在同一个 table 中有这些数据。如果它们是相关的并且您正在尝试为一列设置下拉列表然后过滤第二个下拉列表中的项目那么您真的应该 return 完整的行集并让您的前端应用程序处理过滤(并显示独特的结果)。大多数下拉小部件应该允许这种链接。