[英]SELECT unique values from table with multiple columns containing similar data
我正在嘗試從具有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 |
+-------------------------------------------------------------------------------------------------+
但是,正如您所看到的,仍然有重復項,而且我不確定如何將它們分成行。
任何幫助表示贊賞!
我不確定為什么要使用群組連接。 聯合可以輕松實現期望的結果,聯合會自動刪除重復項。
SELECT country1 AS countries FROM tab
UNION
SELECT country2 FROM tab
UNION
SELECT country3 FROM tab
ORDER BY 1;
您得到重復項是因為您僅在每一列中消除了重復項,而不是整體。 您可能想要更多這樣的東西:
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
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.