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

标签 mysql sql database join

这是我的数据库,其中包含音乐家的数据。我的数据库设计技能不是最好的,但希望还可以。

ERM

标签=流派,例如摇滚。

技能=吉他或歌手

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/

相关文章:

mysql - 通过避免冗余编写更好的 SQL 代码

c# - 当 mdb 文件有密码时从 .net Access mdb 文件内容

MySQL:计算多对多表中的实例

php - Mysql 我不断获得总工作作为返回

php - 为什么这个 PDO 回滚不起作用?

php - 如何使用 WordPress API 在 PHP 领域获取 MySQL 表列的最大值

sql - 带有多个列的oracle汇总功能

sql - 示例 [英文] 用于填充表的字典 SQL 脚本?

java - 为什么我的 getColumnIndex() 返回 -1?

mysql - SQL 中的员工工资