[英]MySQL - Left join … on … LIKE
我有2张桌子
在“用户”表上,每个用户都有许多技能。 它们存在于单个列中并连接在一起。 在表格“技能”上,每项技能都有一个相关的标签。
碰巧有些用户拥有的技能不再在表“技能”上引用了。
我想要做的选择应列出表用户的所有记录,这些用户包含不再参考表技能的技能。
我试图做一些像:
SELECT user_id
FROM USERS LEFT JOIN SKILLS
ON USERS.skills = SKILLS.skill_id
WHERE SKILLS.skill_id = null
但是, USERS.skills = SKILLS.skill_id上的声明不符合我的需要。 USERS.skills列包含连接的skill_id。
我试图通过ON USERS.skills LIKE SKILLS.skill_id替换那个位但是它仍然感觉不对而且查询永远运行...
能不能请你开导。
没有编程,你不能以这种方式做到这一点。 有两种可能的方法:
理想情况下,您应该规范化架构。
目前,您可以使用串联来使用like
和length
并使用replace
来查找逗号分隔字符串中的项目数。
select *
from users u
where length(u.skills) - length(replace(u.skills, ',', '')) + 1 <> (
select count(*)
from skills s
where concat (', ',u.skills,',') like concat ('%, ',s.skill_id,',%')
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.