在 MySQL 5.6 数据库中我有表tablename
其中有(包括其他)三个TEXT
列:col_a, col_b, col_c
.
我想从这三列中提取所有至少 5 个字符长的唯一单词(单词之间用空格分隔)。我所说的“单词”是指任何非空格字符的字符串,例如“foo-123”将是一个单词,“099423”也是一个单词。这些列都是utf8格式的InnoDB列。
是否有一个查询可以做到这一点?
编辑:根据要求,这是一个示例:(在实际数据中 col_a、col_b 和 col_c 是文本字段,可能有大量单词。)
select id, col_a, col_b, col_c from tablename;
id | col_a | col_b | col_c
----|--------------------|----------------|----------------------
1 | apple orange plum | red green blue | bill dave sue
2 | orange plum banana | yellow red | frank james
3 | kiwi fruit apple | green pink | bill sarah-jane frank
expected_result: ["apple", "orange", "banana", "fruit",
"green", "yellow", "frank", "james", "sarah-jane"]
我不关心结果的顺序。谢谢!
编辑:在上面的示例中,所有内容都是小写的,因为这就是我碰巧将与这个问题相关的所有内容存储在现实生活表中的方式。但是,为了争论,如果它确实包含一些大写字母,我希望查询忽略大写字母(这是我的数据库配置的设置)。
EDIT2:如果有帮助的话,所有文本列都有一个全文索引。
EDIT3:这是创建示例数据的 SQL:
DROP TABLE IF EXISTS `tablename`;
CREATE TABLE `tablename` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`col_a` text,
`col_b` text,
`col_c` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
LOCK TABLES `tablename` WRITE;
INSERT INTO `tablename` VALUES (1,'apple orange plum','red green blue','bill dave sue'),(2,'orange plum banana','yellow red','frank james'),(3,'kiwi fruit apple','green pink','bill sarah-jane frank');
UNLOCK TABLES;