首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检索所有in,其中` `name`‘类似于一个查询中的%current_name

检索所有in,其中` `name`‘类似于一个查询中的%current_name
EN

Stack Overflow用户
提问于 2015-02-07 14:51:14
回答 1查看 216关注 0票数 1

我有一张桌子,像:

代码语言:javascript
复制
id | name
1  | gecko
2  | b-gecko
3  | c-gecko
4  | toucan
5  | s-toucan

我想在一个查询中检索idnamelookalike字段。类似于:

代码语言:javascript
复制
id | name   | lookalike
1  | gecko  | 1,2,3
4  | toucan | 4,5

..。或者说:

代码语言:javascript
复制
id | name   | lookalike
1  | gecko  | 2
1  | gecko  | 3
4  | toucan | 5

这有可能吗?我在那个表中有大约50,000条记录,如果逐行检查,将需要对每条记录进行大量简单查询。

我认为查询应该类似于:

代码语言:javascript
复制
SELECT t1.`id`, t1.`name`, (SELECT t2.`id` FROM `table1` t2 WHERE t2.`name` LIKE CONCAT('%', t1.`name`)) as `lookalike` FROM `table1` t1

..。但我错过了一次机会。谢谢!

LE:即使使用

代码语言:javascript
复制
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

由于要检查的行数很多,所以我会有很多服务器崩溃。我知道我遇到了最糟糕的情况,但我想找出如何优化这个问题。

我试过的第二个版本

代码语言:javascript
复制
SELECT 
    t.id,
    t.name,
    t2.id
FROM 
    table1 t 
LEFT JOIN 
    table1 t2 
ON 
    t2.name LIKE CONCAT('%', t.name)

但是这个服务器也崩溃了。

EN

回答 1

Stack Overflow用户

发布于 2015-02-07 15:21:22

Mysql有一个GROUP_CONCAT函数,它允许您将子查询转换为字符串。

此外,将行本身作为一个相似的类型包含是没有用的,因此您应该在子查询中筛选出原始的动物

下面是你如何做到这一点的一个例子。

代码语言:javascript
复制
SELECT *,
   (SELECT GROUP_CONCAT(id SEPARATOR ', ')
   FROM table1
   WHERE `name` LIKE '%toucan%'
   AND `name` != 'toucan') as lookalikes
FROM table1
WHERE `name` = 'toucan'

这里的结果是

代码语言:javascript
复制
id | name    | lookalikes
4  | toucan  | 5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28383546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档