使用连接在SQL中查询多个表

时间:2015-02-20 11:35:53

标签: mysql sql database join

这是我的数据库,用于包含音乐家的数据。我的数据库设计技巧并不是最好的,但希望它没问题。

ERM

Tags = genres,例如rock。

技能=吉他或歌手

User_tags和user_skills仅用于将表链接在一起,因为用户可以拥有许多技能和许多标签。

我要做的是查询数据库,以便找到具有某些技能并对某些类型感兴趣的用户。例如,找到所有对摇滚感兴趣并且可以弹吉他的用户。我查找了联接并设法提出以下查询:

SELECT users.username, skills.skill_name
FROM user_skills
    JOIN users
        ON users.user_ID = user_skills.user_ID
    JOIN skills
        ON skills.skill_ID = user_skills.skill_ID
WHERE skills.skill_name = 'Guitar';

这很有效,我能够找到所有弹吉他的用户,但我无法弄清楚如何包含数据库的另一半(标签)。我试过这个:

SELECT users.username, skills.skill_name, tags.tag_name
FROM user_skills, user_tags
    JOIN users
        ON users.user_ID = user_skills.user_ID
    JOIN skills
        ON skills.skill_ID = user_skills.skill_ID
    JOIN tags
        ON tags.tag_ID = user_tags.tag_ID
WHERE skills.skill_name = 'Guitar' AND tags.tag_name = 'Rock';

但是我收到了一个错误:#1054 - Unknown column 'user_skills.user_ID' in 'on clause'

这个专栏肯定在那里,所以我唯一可以想到的就是打破它是你在从两张桌子中选择东西时无法加入。我看到的每一个例子都只是从一个表中选择数据。

有谁知道如何查询我的所有表格?

1 个答案:

答案 0 :(得分:2)

您仍然可以从两个表中选择数据。试一试:

 SELECT DISTINCT
    users.username
 FROM
    users
 INNER JOIN
    user_skills ON users.user_id = user_skills.user_id 
 INNER JOIN
    skills ON (user_skills.skill_id = skills.skill_id AND skills.skill_name = 'Guitar')
 INNER JOIN
    user_tags ON users.user_id = user_tags.user_id
 INNER JOIN 
    tags ON (user_tags.tag_id = tags.tag_id AND tags.tag_name = 'Rock')