【发布时间】:2015-02-12 02:07:47
【问题描述】:
我需要为侦察数据库编写一个查询,将徽章的要求与给定成员已经获得的技能进行比较。目的是几种技能适用于多个徽章。我的相关表格(有很多)如下所示:
Badge_Table: 徽章_ID, 徽章名称, 徽章_描述,
Badge_Skills_Table: Badge_Skill_ID, 徽章_ID, Skill_ID,
技能表: 技能 ID, 技能名称, 技能描述,
Skills_Earned_Table: Skills_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
那么任何人都可以通过以下方式帮助指导我:
- 如何返回给定技能适用的所有徽章。 (完成)
- 如何归还给定侦察兵已获得技能的所有徽章。
- 返还给定侦察员已获得所有技能的所有徽章。
如果您能提供任何帮助,我将不胜感激,
【问题讨论】:
-
你所有的
ON子句都是错误的。它们需要进行比较,例如ON badge_skills_table.badge_ID = badge_table.badge_id. -
没有必要在所有
INNER JOIN子句周围加上括号。