嵌套的CONCAT_WS抛出#1242 - 子查询返回多于1行的错误

时间:2012-08-14 18:22:18

标签: mysql sql

我们假设表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*.....

什么是最好的解决方法?

2 个答案:

答案 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;