首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LEFT JOIN和LIKE mysql

使用LEFT JOIN和LIKE mysql
EN

Stack Overflow用户
提问于 2011-02-08 23:50:23
回答 3查看 14K关注 0票数 4

我在mysql查询中遇到问题。我的表格如下所示:

代码语言:javascript
复制
mysql> select username, specialty from users;
+----------+------------------+
| username | specialty        |
+----------+------------------+
| JinkX    | php, html, mysql |
| test1    | html             |
+----------+------------------+


mysql> select name, tags from tasks;
+----------------+------+
| name           | tags |
+----------------+------+
| fix front page | html |
+----------------+------+

当我尝试执行以下查询时,只有当专业知识与标签完全相同时,它才能正常工作。但我希望它在这两个方面都有效

代码语言:javascript
复制
mysql> select tasks.name from users left join tasks on tasks.tags LIKE users.specialty where users.username = 'test1';
+----------------+
| name           |
+----------------+
| fix front page |
+----------------+

mysql> select tasks.name from users left join tasks on tasks.tags LIKE users.specialty where users.username = 'JinkX';
+------+
| name |
+------+
| NULL |
+------+
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-09 00:02:02

那么,您已经发现了将独立值保存为逗号分隔字符串的痛苦。

如果可以,我建议您更改数据结构,从user表中获取structure列,并创建一个新的user_specialty表,其中包含指向users.usernametasks.tags的外键。

代码语言:javascript
复制
+----------+------------------+
| username | tag              |
+----------+------------------+
| JinkX    | php              |
| JinkX    | html             |
| JinkX    | mysql            |
| test1    | html             |
+----------+------------------+
票数 6
EN

Stack Overflow用户

发布于 2011-02-08 23:55:22

你做错了like

尝试此查询:

代码语言:javascript
复制
select tasks.name 
from users left join tasks on users.specialty LIKE CONCAT('%',tasks.tags,'%') 
where users.username = 'JinkX'

这不是最好的方式,但它应该可以工作

编辑:根据评论,有另一种方法应该更好

使用REGEXP:

代码语言:javascript
复制
select tasks.name 
from users left join tasks on users.specialty REGEXP CONCAT('(^|,) ?',tasks.tags,' ?($|,)') 
where users.username = 'JinkX'
票数 9
EN

Stack Overflow用户

发布于 2011-02-09 00:01:56

您需要find_in_set函数。在您的where子句中添加以下内容:

代码语言:javascript
复制
FIND_IN_SET(task.tags,users.specialty)

(Reference)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4935188

复制
相关文章

相似问题

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