以下是我要完成的事情:
我有一个名为“users_skills”的表。该表由两个字段“user_id”和“skill_id”组成。我想从表中提取显示用户具有特定技能的所有行。
例如,我想从拥有skill_id 110,120和130的“users_skills”中提取所有用户。如果“users_skills”中的用户没有全部3,我在结果中不需要它们。
我尝试了一个简单的AND(例如users_skills.skill_id = 110 AND users_skills.skill_id = 120 AND users_skills.skill_id = 130),但这不起作用。
我将如何做到这一点?谢谢!
答案 0 :(得分:1)
尝试使用自我加入:
SELECT us1.* FROM users_skills us1
JOIN users_skills us2 ON us1.user_id = us2.user_id
JOIN users_skills us3 ON us1.user_id = us3.user_id
WHERE us1.skill_id = 110 AND us2.skill_id = 120 AND us3.skill_id = 130
我假设您确实需要表users
和skills
中的数据,在这种情况下,您可以使用
SELECT users.*, skills.* FROM users
JOIN users_skills us1 ON users.id = user_id
JOIN users_skills us2 ON users.id = us2.user_id
JOIN users_skills us3 ON users.id = us3.user_id
JOIN skills ON skills.id = us1.skill_id OR skills.id = us2.skill_id OR skills.id = us3.skill_id
WHERE us1.skill_id = 110 AND us2.skill_id = 120 AND us3.skill_id = 130