这是我的数据库,用于包含音乐家的数据。我的数据库设计技巧并不是最好的,但希望它没问题。
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'
这个专栏肯定在那里,所以我唯一可以想到的就是打破它是你在从两张桌子中选择东西时无法加入。我看到的每一个例子都只是从一个表中选择数据。
有谁知道如何查询我的所有表格?
答案 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')