SQL Query根据要加入的主表的PK填充表

时间:2013-02-07 21:55:52

标签: mysql database database-design

这是我的数据库结构(基本关系): DataBase Structure

我正在尝试制定一个单行查询,该查询将填充clients_ID,Job_id,tech_id和& Part_id和返回所有工作订单。更不用说了。

到目前为止,我一直在努力生成此查询:

SELECT      cli.client_name,    tech.tech_name,  job.Job_Name, w.wo_id,  w.time_started, w.part_id, w.job_id, w.tech_id, w.clients_id, part.Part_name   
 FROM work_orders as w, technicians as tech, clients as cli, job_types as job, parts_list as part
LEFT JOIN technicians as techy ON tech_id = techy.tech_name
LEFT JOIN parts_list  party ON part.part_id = party.Part_Name
LEFT JOIN job_types joby ON job_id = joby.Job_Name
LEFT JOIN clients cliy ON clients_id = cliy.client_name

显然,一旦所有加入发生,它甚至根据其引用甚至没有填充正确的外键值。

  • [某些值作为实际的外键ID出现,甚至没有 相应的价值。]

    它只会持续大约20-30次,具体取决于我拥有的一张桌子的最大行(上面的一个)。

我只创建了两个工单,理想情况下,它应该只返回两个记录,列和具有正确信息的字段。我能做错什么?没有使用MySQL太长时间,但我正在尽可能多地学习。

1 个答案:

答案 0 :(得分:1)

您的加入条件有误。加入tech_id = tech_id,而不是tech_id = tech_name。看起来你为所有联接做了这个,所以他们都需要修复。

我真的不遵循你的问题的文字,所以我的答案完全基于你的查询。

修改

在此处回复您的评论。你说你想“加载”技术名称列。我猜你的意思是你希望科技名称成为你的结果集的一部分。

查询的SELECT部分​​决定了结果集中的列。只要在FROM / JOIN子句中引用了列所在的表,就可以从该表中选择任何列。

将JOIN语句视为根据另一个表中的值“查找”一个表中的值的方法。这是一个非常简化的定义,但它是开始考虑它的好方法。您希望在结果集中使用技术名称,因此您可以在Technicians表中查找它,它就是它所在的位置。但是,您希望通过“工作订单”表中的值查找它。您在Work Orders表中将其与Technicians表相关联的键(实际上称为外键)是tech_id。您可以使用tech_id在Technicians表中查找相关行,这样做可以在结果集中包含该表中的任何列。