0

让我们假设表 t 如下:

表:

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*.....

最好的解决方法是什么?

4

2 回答 2

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 子句。)

于 2012-08-14T18:45:08.673 回答
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;
于 2012-08-14T18:52:35.793 回答