我有2张桌子
在桌面"用户"上,每个用户都有许多技能。它们存在于单个列中并连接在一起。 在表格"技能",每个技能都有一个相关的标签。
有些用户拥有未在表格中引用的技能"技能"了。
我想做的选择应该列出包含技能的表用户的所有记录,这些技能不再被引用。
我试图做类似的事情:
SELECT user_id
FROM USERS LEFT JOIN SKILLS
ON USERS.skills = SKILLS.skill_id
WHERE SKILLS.skill_id = null
但是,声明 ON USERS.skills = SKILLS.skill_id 不符合我的需要。 USERS.skills列包含连接的skill_id。
我试图用替换那个位USERS.skills LIKE SKILLS.skill_id ,但它仍然感觉不对,查询会永远运行...
请你赐教。
答案 0 :(得分:0)
如果没有编程,你就无法以这种方式做到这一点。 有两种可能的方式:
答案 1 :(得分:0)
理想情况下,您应该规范化架构。
目前,您可以使用串联来使用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,',%')
);