这是我的数据库,其中包含音乐家的数据。我的数据库设计技能不是最好的,但希望还可以。
标签=流派,例如摇滚。
技能=吉他或歌手
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 - “on 子句”中的未知列“user_skills.user_ID”
该列肯定存在,所以我能想到的唯一破坏它的是,当您从两个表中选择内容时,您无法加入。我查看的所有其他示例都只是从一个表中选择数据。
有谁知道如何查询我的所有表?
最佳答案
您仍然可以从两个表中选择数据。尝试一下:
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')
关于mysql - 使用连接在 SQL 中查询多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28628039/