这是我的数据库结构(基本关系):
我正在尝试制定一个单行查询,该查询将填充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 的时间不长,但正在尽我所能地学习。
最佳答案
您的加入条件错误。加入 tech_id = tech_id,而不是 tech_id = tech_name。看起来您对所有连接都执行了此操作,因此它们都需要修复。
我确实不明白您问题的内容,因此我的回答仅基于您的查询。
编辑
在这里回复您的评论。您说您想“加载”技术名称列。我假设您的意思是您希望技术名称成为结果集的一部分。
查询的 SELECT 部分决定结果集中的列。只要在 FROM/JOIN 子句中引用该列所在的表,您就可以从该表中 SELECT 任何列。
将 JOIN 语句视为一种根据一个表中的值“查找”另一个表中的值的方法。这是一个非常简化的定义,但这是开始思考它的好方法。您希望结果集中包含技术名称,因此您可以在技术人员表中查找该名称,该表就位于该表中。但是,您希望通过“工单”表中的值来查找它。 Work Orders 表中将其与 Technicians 表关联起来的键(实际上称为外键)是 tech_id。您可以使用 tech_id 查找 Technicians 表中的相关行,这样就可以将该表中的任何列包含在结果集中。
关于mysql - SQL 查询根据正在连接的主表的 PK 填充表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14761763/