我们假设表t如下:
t table:
a b c d e
a1 b1 c1 d1 e1
a2 b2 c2 d2 e2
a3 b3 c3 d3 e3
. . . . .
. . . . .
. . . . .
此查询引发#1242错误:
SELECT CONCAT_WS( '*', (SELECT CONCAT_WS( '_', a, b, c) FROM t)) AS test
预期结果是:
test
a1_b1_c1*a2_b2_c2*a3_b3_c3*.....
什么是最好的解决方法?
答案 0 :(得分:2)
问题是“t”有多行。也许你想要以下之一:
SELECT CONCAT_WS( '*', (SELECT CONCAT_WS( '_', a, b, c) FROM t limit 1)) AS test
或
SELECT CONCAT_WS( '*', (SELECT max(CONCAT_WS( '_', a, b, c)) FROM t)) AS test
哎呀,我错过了问题中的预期结果。你想要:
select group_concat(vals SEPARATOR '*' ORDER BY t.id)
from (select concat_ws('_', a, b, c) as vals
from t
) t
(假设有一个名为“id”的列用于排序结果。如果没有,请省略order by子句。)
答案 1 :(得分:1)
CREATE TEMPORARY TABLE tempFoo (
col1 varchar(250) NOT NULL
);
INSERT INTO tempFoo (SELECT CONCAT_WS( '_', a, b, c) as r FROM t);
SELECT GROUP_CONCAT(col1 separator '*') FROM tempFoo;