1

这是我想要完成的事情:

我有一个名为“users_skills”的表。该表由两个字段组成,“user_id”和“skill_id”。我想从表中提取所有显示用户具有特定技能的行。

例如,我想从“users_skills”中提取所有具有 Skill_id 110、120 和 130 的用户。如果“users_skills”中的用户没有全部 3 个,我不希望他们出现在我的结果中。

我尝试了一个简单的 AND(如 users_skills.skill_id=110 AND users_skills.skill_id=120 AND users_skills.skill_id=130),但没有奏效。

我将如何做到这一点?谢谢!

4

1 回答 1

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

我假设您实际上想要表中的数据usersskills在这种情况下,您可以使用

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
于 2013-10-10T17:13:06.017 回答