0

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

我正在尝试制定一个单行查询,该查询将填充 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 的时间不长,但我正在尽可能多地学习。

4

1 回答 1

1

您的加入条件错误。加入 tech_id = tech_id,而不是 tech_id = tech_name。看起来您对所有连接都执行此操作,因此它们都需要修复。

我真的不按照你的问题的文字,所以我的回答完全基于你的查询。

编辑

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

The SELECT part of the query is what determines the columns that are in the result set. As long as the table where the column lives is referenced in the FROM/JOIN clauses, you can SELECT any column from that table.

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

于 2013-02-07T22:00:02.993 回答