我有一张桌子,像:
id | name
1 | gecko
2 | b-gecko
3 | c-gecko
4 | toucan
5 | s-toucan我想在一个查询中检索id、name和lookalike字段。类似于:
id | name | lookalike
1 | gecko | 1,2,3
4 | toucan | 4,5..。或者说:
id | name | lookalike
1 | gecko | 2
1 | gecko | 3
4 | toucan | 5这有可能吗?我在那个表中有大约50,000条记录,如果逐行检查,将需要对每条记录进行大量简单查询。
我认为查询应该类似于:
SELECT t1.`id`, t1.`name`, (SELECT t2.`id` FROM `table1` t2 WHERE t2.`name` LIKE CONCAT('%', t1.`name`)) as `lookalike` FROM `table1` t1..。但我错过了一次机会。谢谢!
LE:即使使用
SELECT t1.`id`, t1.`name`, (SELECT GROUP_CONCAT(id SEPARATOR ',') FROM `table1` t2 WHERE t2.`name` LIKE CONCAT('%', t1.`name`) AND t1.name<>t2.name) as `lookalike` FROM `table1` t1由于要检查的行数很多,所以我会有很多服务器崩溃。我知道我遇到了最糟糕的情况,但我想找出如何优化这个问题。
我试过的第二个版本
SELECT
t.id,
t.name,
t2.id
FROM
table1 t
LEFT JOIN
table1 t2
ON
t2.name LIKE CONCAT('%', t.name)但是这个服务器也崩溃了。
发布于 2015-02-07 15:21:22
Mysql有一个GROUP_CONCAT函数,它允许您将子查询转换为字符串。
此外,将行本身作为一个相似的类型包含是没有用的,因此您应该在子查询中筛选出原始的动物
下面是你如何做到这一点的一个例子。
SELECT *,
(SELECT GROUP_CONCAT(id SEPARATOR ', ')
FROM table1
WHERE `name` LIKE '%toucan%'
AND `name` != 'toucan') as lookalikes
FROM table1
WHERE `name` = 'toucan'这里的结果是
id | name | lookalikes
4 | toucan | 5https://stackoverflow.com/questions/28383546
复制相似问题