这是我的数据库结构(基本关系):
我正在尝试制定一个单行查询,该查询将填充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太长时间,但我正在尽可能多地学习。
答案 0 :(得分:1)
您的加入条件有误。加入tech_id = tech_id,而不是tech_id = tech_name。看起来你为所有联接做了这个,所以他们都需要修复。
我真的不遵循你的问题的文字,所以我的答案完全基于你的查询。
修改强>
在此处回复您的评论。你说你想“加载”技术名称列。我猜你的意思是你希望科技名称成为你的结果集的一部分。
查询的SELECT部分决定了结果集中的列。只要在FROM / JOIN子句中引用了列所在的表,就可以从该表中选择任何列。
将JOIN语句视为根据另一个表中的值“查找”一个表中的值的方法。这是一个非常简化的定义,但它是开始考虑它的好方法。您希望在结果集中使用技术名称,因此您可以在Technicians表中查找它,它就是它所在的位置。但是,您希望通过“工作订单”表中的值查找它。您在Work Orders表中将其与Technicians表相关联的键(实际上称为外键)是tech_id。您可以使用tech_id在Technicians表中查找相关行,这样做可以在结果集中包含该表中的任何列。