2011-03-01 8 views
1

私は、カンマで区切られた文字列で構成されるMySQLテーブルの列を持っています。私は、この列を列内にある個別の文字列のセットに変換したいと考えています(テーブルのどの行でも、この列のテーブルの任意の行にある文字列がセットに含まれます)。これを達成する最も簡単な方法は何ですか?MySQLテーブルのカンマ区切りの列から異なる値を取得しますか?

解決策は、純粋なMySQLである必要はありません。これは、UNIXなど、Perlを伴う可能性が

+0

まあ、MySQLには文字列を分割する機能がありません。あなたのストリングを分割するのはかなり難しいでしょう。 – BoltClock

答えて

1

を私が選んだ道は、TRに結果mysqlのシェルとパイプの外に選択mysqlコマンドを実行することだったとソート--uniq

mysql my_db [-p -u -h] -se "select my_column from my_table;" | tr ',' '\n' | sort -u 

これはかなり簡単で、わかる限り正しい結果を得ているようです。

+2

素敵なワンライナー! mysqlで-sフラグを使用して、カラムヘッダーが出力と混ざらないようにすることをお勧めします。また、dbを指定すると、 'use my_db;'を使う必要はありません。同様に: 'mysql my_db [-p -u -h] -se" my_tableからmy_columnを選択; " | tr '、' '\ n' |ソート-u' –

1

おそらくSELECT INTO OUTFILEsed、およびLOAD DATA INFILEを使用して、カンマ区切りの列は異なる文字列の間に合わせと-リストを得ることができます。

基本的にテキストデータをフラットファイルにダンプします。カンマを行区切り記号として使用し、各文字列をデータベースに戻すときに別々の行として扱います。次に、抽出したテーブルを新しいテーブルにロードし、別個の値を選択します。私の頭の上オフ

、コードは次のようになります。

select str 
into outfile 
'/tmp/your_table_data.txt' 
lines terminated by ',' 
from your_table; 

sed -e 's/\\,/,/g' -e 's/,$//' /tmp/your_table_data.txt > /tmp/commadelimited.txt 

create table your_table_parsed(str text); 

load data infile '/tmp/commadelimited.txt' 
ignore into table your_table_parsed 
fields terminated by ',' 
lines terminated by ','; 

select distinct str from your_table_parsed; 
+0

提案していただきありがとうございます(+1)。最終的に、私はmysqlの外で動作するソリューションを選択しました。 – jonderry

関連する問題