我在MySQL表中有一个由逗号分隔的字符串组成的列。我想将此列转换为列中出现的一组不同的字符串(对于表中的任何行 - 该集包括在此列的表的任何行中出现的字符串)。最简单的方法是什么?
解决方案不需要是纯MySQL。它可能涉及unix,perl等。
答案 0 :(得分:1)
您可能会使用SELECT INTO OUTFILE
,sed
和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;
答案 1 :(得分:1)
我选择的方法是在mysql shell之外运行select mysql命令并将结果传递给tr并排序--uniq
mysql my_db [-p -u -h] -se "select my_column from my_table;" | tr ',' '\n' | sort -u
这很简单,据我所知,似乎给出了正确的结果。