我試圖用連接創建一箇中等複雜的查詢: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