【问题标题】:Querying multiple mySQL tables in a single query在单个查询中查询多个 mySQL 表
【发布时间】:2015-02-12 02:07:47
【问题描述】:

我需要为侦察数据库编写一个查询,将徽章的要求与给定成员已经获得的技能进行比较。目的是几种技能适用于多个徽章。我的相关表格(有很多)如下所示:

Badge_Table徽章_ID, 徽章名称, 徽章_描述,

Badge_Skills_TableBadge_Skill_ID, 徽章_ID, Skill_ID,

技能表技能 ID, 技能名称, 技能描述,

Skills_Earned_TableSkills_Earned_ID 技能_ID 用户 ID

User_Table用户 ID, 姓名, 年龄, 地址

主键以斜体显示,外键关系从 Badge_table 到 Badge_Skills_Table 到 Skills_Table 到 Skills_Earned_table 到 User_Table。

到目前为止,我提出了以下想法:

选择指定技能的所有徽章

SELECT badge_table.badge_name
FROM (badge_table 
     INNER JOIN badge_skills_table ON badge_ID 
     INNER JOIN Skills_Table ON skill_Id)
WHERE Skills_Table.Skill_Id = 1;

为每个技能选择所有徽章

SELECT badge_table.badge_name
FROM (badge_table 
      INNER JOIN badge_skills_table ON badge_ID 
      INNER JOIN Skills_Table ON skill_Id)
WHERE Skills_Table.Skill_Id = Skill_Badge_Table.Skill_Id

为指定用户选择指定技能的所有徽章 - 不太好用

SELECT badge_table.badge_name
FROM (badge_table 
     INNER JOIN badge_skills_table ON badge_ID 
     INNER JOIN Skills_Table ON skill_Id 
     INNER JOIN Skills_Earned_Table On skill_ID 
     INNER JOIN users_table ON user_ID)
WHERE Skills_Earned_Table.User_ID= 1 AND Skills_Earned_Table.SKILL_ID = Skill_Badge_Table.skill_ID

那么任何人都可以通过以下方式帮助指导我:

  1. 如何返回给定技能适用的所有徽章。 (完成)
  2. 如何归还给定侦察兵已获得技能的所有徽章。
  3. 返还给定侦察员已获得所有技能的所有徽章。

如果您能提供任何帮助,我将不胜感激,

【问题讨论】:

  • 你所有的ON 子句都是错误的。它们需要进行比较,例如ON badge_skills_table.badge_ID = badge_table.badge_id.
  • 没有必要在所有INNER JOIN 子句周围加上括号。

标签: mysql join


【解决方案1】:

您的ON 子句中没有<conditions>。在下面试试我的查询:

SELECT A.badge_name
FROM badge_table A
     INNER JOIN badge_skills_table B ON A.badge_ID=B.badge_ID
     INNER JOIN Skills_Table C ON B.skill_Id=C.skill_ID
     INNER JOIN Skills_Earned_Table D ON C.skill_ID=D.skill_ID 
     INNER JOIN users_table E ON user_ID ON D.user_ID=E.user_ID
WHERE D.User_ID= 1 AND D.skill_ID = B.skill_ID

【讨论】:

  • 假设列强相同的数据类型,OP 可以使用USING 而不是ON。这将在两个表中都存在的指定列上加入表。
  • 谢谢你,我今天就试一试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 2019-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
相关资源
最近更新 更多