【发布时间】:2015-05-13 13:07:44
【问题描述】:
我试图从一个已连接两次的表中连接 2 GROUP_CONCAT( columns ) 的值,然后从列表中获取唯一项。
我可以在查询之外执行所有这些操作,但如果可能的话,最好使用 JOIN 和一些花哨的字符串操作从数据库中提取数据。
简单地说,我想通过选择 1,2,3 和 1,3,4 来生成 1,2,3,4 >。 1,2,3 和 1,3,4 是 GROUP_CONCAT 在两次连接表上的结果。我可以做到这一点:
SELECT CONCAT_WS(
",",
"1,2,3",
"1,3,4"
)
哪个输出1,2,3,1,3,4
我希望能够做类似的事情:
-- NOTE TO SKIM READERS: THIS QUERY WILL NOT WORK
SELECT
SORT_LIST(
DISTINCT
CONCAT_WS(
",",
"1,2,3",
"1,3,4"
)
)
-- NOTE TO SKIM READERS: THIS QUERY WILL NOT WORK
但我在 MySQL 中找不到类似的东西。
1,2,3和1,3,4已经用GROUP_CONCAT( DISTINCTcol)生产了
【问题讨论】:
-
单列中是否有逗号分隔值?有更好的方法来存储这些数据,这会使这个查询更直接。这是一个选择吗?
-
我正在加入另一个表,该表的值 A=1,B=2 和 B=1,A=2 不同行。所以我加入了两次并选择
CONCAT( A,B ),然后选择CONCAT( B,A ),然后选择CONCAT,结果是“12,12”。问题的排序方面不太重要,这确实是我需要解决的独特/独特方面 -
"1,2,3" 和 "1,3,4" 是两个字符串,它们不匹配,你想把它们当作整数 1,2,3 和 1,3,4 ,我认为如果不编写自定义函数是不可能的。
-
好的,我已经找到了解决方法,我必须在子查询中的
UNION中完全选择我的 2 个表中的所有行,然后加入一个 ID 以限制它们但这意味着我可以在子查询的结果上使用GROUP_CONCAT( DISTINCT... ),这给了我想要的:pastebin.com/NTh2CfuD