选择从同一个表中分开多个不同的列

问题描述 投票:1回答:2

让我们这个样本数据:

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

我需要一个SQL为每个列分别返回不同的值(如饲料下拉值滤波)。这样的结果应该是:

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

结果不一定是这种格式;它更重要的是,我有一个很容易访问和迭代的不同的值。

我得到的最接近是从这里:https://stackoverflow.com/a/12188117/169252

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

这将返回:

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

这是相当密切的,如果没有更好的解决办法来了,我会选择这一项;作为值用逗号分隔,我需要分割的结果是不是最佳的。

我也尝试:

SELECT DISTINCT from col1,col2 FROM testtable;

这将返回两列的不同值,不是我想要的。

也:

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

已经提出的其他地方不回我需要什么,但在-不同返回每列:)

mysql sql distinct
2个回答
2
投票

你要问的一个问题是,你期望的结果集并没有真正使任何意义从关系数据库的角度来看。在数据行的每列都应与该行的其他列的关系。

接近这一点的最好办法,国际海事组织,是返回两个结果集,并处理每一个为每个下拉框的:

SELECT DISTINCT column_1 FROM My_Table

SELECT DISTINCT column_2 FROM My_Table

我也想看看为什么你在同一个表中的数据与如果两列是不相关的开头。如果是相关的,你想有一个下拉的一列是,过滤器在第二个下拉列表中的项目,那么你真的应该返回的全套行,让您的前端应用程序处理过滤(和显示唯一的结果)。大多数下拉部件应该允许这种连接的。


-1
投票

尝试

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

我认为GROUP_CONCAT是把逗号到返回表中。

© www.soinside.com 2019 - 2024. All rights reserved.