我试图用连接创建一个中等复杂的查询:SQL连接“涨”两个表
SELECT `history`.`id`,
`parts`.`type_id`,
`serialized_parts`.`serial`,
`history_actions`.`action`,
`history`.`date_added`
FROM `history_actions`, `history`
LEFT OUTER JOIN `parts` ON `parts`.`id` = `history`.`part_id`
LEFT OUTER JOIN `serialized_parts` ON `serialized_parts`.`parts_id` = `history`.`part_id`
WHERE `history_actions`.`id` = `history`.`action_id`
AND `history`.`unit_id` = '1'
ORDER BY `history`.`id` DESC
我想,以取代在``用SELECT语句parts`.`type_id` part_list`.`name`这里我需要强制执行的关系是`part_list`.`id` =`parts`.`type_id`。此外,我必须使用连接,因为在某些情况下`history`.`part_id`可能为NULL,这显然不是有效的部件ID。我将如何修改查询来做到这一点?
这里是要求一些样本日期: 历史表:
alt text http://ianburris.com/dropbox/public/so/q1/history.jpg
serialized_parts表:
alt text http://ianburris.com/dropbox/public/so/q1/serialized_parts.jpg
配件表:
alt text http://ianburris.com/dropbox/public/so/q1/parts.jpg
part_list表:
alt text http://ianburris.com/dropbox/public/so/q1/part_list.jpg
什么我想看到的是:
id name serial action date_added
4 Battery 567 added 2010-05-19 10:42:51
3 Antenna Board 345 added 2010-05-19 10:42:51
2 Main Board 123 added 2010-05-19 10:42:51
1 NULL NULL created 2010-05-19 10:42:51
首先开始摆脱隐含的连接。他们是一个不好的做法,并且与左连接结合在一起时非常混乱。 我也不清楚你在问什么,你能提供样品数据,因为它在表格中,你想看到什么回报。 – HLGEM 2010-05-19 16:49:19
隐含连接是什么意思?是的,我现在要添加一些示例数据。 – blcArmadillo 2010-05-19 16:50:46
'隐含'连接是当你列出用逗号分隔的表时 - 你的例子有'history_actions,history'。请参阅下面的答案,了解如何将其明确设置为INNER JOIN。 – AvatarKava 2010-05-19 16:56:42