0

テーブルtを次のように仮定しましょう。

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

最高のworaroundは何ですか?

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 に答える