2017-06-15 16 views
0

シンプルなものが見つからない場合がありますが、より複雑なクエリの中ではCONCAT_WSのセパレータが動作していないようです。CONCAT_WS(mysql/mariadb)で無視されるセパレータの選択

まず私は、それ自体でCONCAT_WSをテストした:

test 
a/b/c 

をそれから私は私が使用することを意図しGROUP_CONCATの内側にそれを試してみました:

返さ
SELECT GROUP_CONCAT(CONCAT_WS('/', 'a', 'b', 'c')) AS `test`; 

返さ

SELECT CONCAT_WS('/', 'a', 'b', 'c') AS `test`; 

test 
a/b/c 

オーケーすべての良いので、私はライブデータの私の適切なクエリでそれを試してみました:

SELECT `Box Barcode`,`Title`,`Start Date`,`End Date`,`Offsite Indicator`,`MIA`, 
GROUP_CONCAT(CONCAT_WS('/',`Description`)) AS `Contents` 
FROM `boxes` 
GROUP BY `Box Barcode` ORDER BY `Box Barcode` ASC ; 

正しい結果が返され、たとえば、代わりに/ のカンマを除いて、ここでの結果の1行があります:

Box Barcode Title  Start Date End Date Offsite Indicator MIA Contents 
C5500501127 PPS AMEX 30/06/2002 30/06/2002 TRUE    FALSE PPS AMEX,PPS AMEX,PPS DINERS,PPS DINERS,PPS LIABILITIES,PPS PROPERTY PLAN AND EQUIPMENT,PPS ASSETS 

数時間のグーグルが手伝っていません。私がどこに間違っているのか誰でも知っていますか?これは、MariaDB(libmysql - 5.5.53)を実行しているDebianサーバ上のPhpMyAdminウェブインタフェース経由です。

+0

_Yourクエリがproblem_を持っているでしょう。 GROUP BYに表示されない非集計カラムを選択しています。バーコードごとに1つのレコードを選択するために必要なロジックで質問を更新してください。 –

+0

はい@TimBiegeleisenは、それらをすべてリストする必要がある他のほぼすべてのSQLにあります。しかし、mysqlはその特定の点について少し緩いです。したがって、「集計関数またはGROUP BY句には含まれていません」というエラーはありません。 MySQLは間違っていますが、気にしません。 XD – monotonehell

答えて

1

GROUP_CONCATにもセパレータがある可能性があります。

SELECT GROUP_CONCAT(CONCAT_WS('/',`Description`)) AS `Contents` 

はこのここ,分離

になります:

GROUP_CONCAT(CONCAT_WS('/',`Description`) SEPARATOR '/') 

GROUP_CONCAT持っ/セパレーター

+0

これはまさにそれでした。私は 'GROUP_CONCAT'に' SEPARATOR ' - ' 'を追加し、間にダッシュを入れたテキストを返しました。私はちょうどそのセパレータがグループではなく、連結に適用されるべきであることを念頭に入れたと思う...大丈夫私は自分自身を混乱させた。私はあなたが正しいと確信しています、私はちょうどそれについてもう少し考える必要があります。ありがとう@アーリオン! – monotonehell

関連する問題