MySQL - 查询具有约束的多个表

时间:2016-01-13 10:45:18

标签: mysql

我有6个SQL表

TABLE Person ( per_id , name , email , gender , DOB ) 
TABLE Job ( job_id , jp_code , pay_rate , company ) 
TABLE JobProfile ( jp_code , title , description ) 
TABLE Skill ( sk_code , skillName , description )
TABLE Requires ( jp_code , sk_code )
TABLE Possess(per_id, sk_code) 

从此表中

  1. 当一个人考虑带有工作代码的工作时,我需要能够 在他的per_id
  2. 上拉下他缺少的技能
  3. 对于给定的per_id,列出他有资格获得的所有工作
  4. 对于给定的per_id,列出具有最高薪水的工作
  5. 找到所有per_id whoa符合给定job_code
  6. 的资格

    我无法形成攻击此类问题的程序。通常,我最终会花费数小时完成一项任务。显然,我在这里错过了一些方向。如果有人告诉我如何在SQL中处理这样的问题会很有帮助。

1 个答案:

答案 0 :(得分:0)

A) Person表与Skill无关,因此无法将Skillset与Person相关联。如果你们之间会有一些关系(可能是一个新的表,它将许多sk_codes与许多相同的per_id相互交换?)。

您必须从该人员技能组中选择所有sk_codes。让我们说这是陈述X

然后你必须找到一个作业所需的所有sk_codes,所以给定一个jp_code选择来自需要jp_code匹配的所有sk_codes。声明Y

所以现在你有X =一个人的所有sk_codes,Y =一个工作所需的所有sk_codes。最后选择sk_code是这两者的子集的所有技能(一个人需要缺少的sk_codes)

b)非常类似于a。找到人员sk_codes,然后找到一个来自Requires的jp_code,其中包含所有这些并且没有一个未完成。

c)可能会遗漏更多信息,因为作业在他有资格的列表中,然后我们从b)只需从作业中选择max(pay_rate)

d)查找与jp_code相关的所有sk_codes,然后选择所有未完成的per_ids

我建议您阅读INNER_JOIN