【问题标题】:SELECT unique values from table with multiple columns containing similar data从包含相似数据的多列表中选择唯一值
【发布时间】:2014-10-17 14:38:48
【问题描述】:

我正在尝试从包含国家代码数据的 3 个不同列的表中选择不同国家代码的列表。

示例

  Raw                                         Desired

+-----------+-----------+-----------+       +-----------+
| country_1 | country_2 | country_3 |       | countries |
+-----------+-----------+-----------+       +-----------+
| GBR       | GBR       | IRL       |       | ARG       |
| DEU       | FRA       | CHE       |       | AUS       |
| CHN       | CHN       | IND       |       | BRA       |
| USA       | CAN       | MEX       |       | CAN       |
| AUS       | JAP       | KOR       |       | CHE       |
| BRA       | ARG       | ARG       |       | CHN       |
| NOR       | SWE       | FIN       |       | DEU       |
| GBR       | FRA       | GBR       |       | FIN       |
| IRL       | IRL       | IRL       |       | FRA       |
+-----------+-----------+-----------+       | GBR       |
                                            | IND       |
                                            | IRL       |
                                            | JAP       |
                                            | KOR       |
                                            | MEX       |
                                            | NOR       |
                                            | SWE       |
                                            | USA       |
                                            +-----------+

到目前为止,我最接近的是这样的查询:

mysql> SELECT
        CONCAT(
            (SELECT GROUP_CONCAT(DISTINCT country_1 ORDER BY country_1) FROM tbl),
            ',',
            (SELECT GROUP_CONCAT(DISTINCT country_2 ORDER BY country_2) FROM tbl),
            ',',
            (SELECT GROUP_CONCAT(DISTINCT country_3 ORDER BY country_3) FROM tbl)
        ) AS countries;

+-------------------------------------------------------------------------------------------------+  
| countries                                                                                       |  
+-------------------------------------------------------------------------------------------------+  
| AUS,BRA,CHN,DEU,GBR,IRL,NOR,USA,ARG,CAN,CHN,FRA,GBR,IRL,JAP,SWE,ARG,CHE,FIN,GBR,IND,IRL,KOR,MEX |  
+-------------------------------------------------------------------------------------------------+  

但正如您所见,仍然存在重复项,我也不确定如何将它们放入行中。

感谢任何帮助!

【问题讨论】:

  • 为什么ARG 在您想要的结果集中?它不是在你的表中出现两次吗?

标签: mysql sql select distinct


【解决方案1】:

我不确定您为什么要使用组连接。使用 union 可以轻松实现所需的结果,它会自动删除重复项。

SELECT country1 AS countries FROM tab
UNION
SELECT country2 FROM tab
UNION
SELECT country3 FROM tab
ORDER BY 1;

【讨论】:

    【解决方案2】:

    您会得到重复项,因为您只在每列中消除重复项,而不是整体。你可能想要更多这样的东西:

    SELECT GROUP_CONCAT(country)
      FROM (
        SELECT DISTINCT country1 AS country FROM tbl
        UNION
        SELECT DISTINCT country2 AS country FROM tbl
        UNION
        SELECT DISTINCT country3 AS country FROM tbl
      )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 2021-10-03
      • 2012-01-24
      • 1970-01-01
      • 2014-07-14
      相关资源
      最近更新 更多