MySQL SQL查询问题来自教程

时间:2011-03-04 06:14:41

标签: mysql sql

我正在阅读一个教程,我只是想确保它是为了我自己的理解而写的。

SELECT Division.id FROM items AS Item
LEFT JOIN categories AS Category ON Category.id = Item.category_id
LEFT JOIN sections AS Section ON Section.id = Category.section_id
LEFT JOIN divisions AS Division ON Division.id = Section.divison_id
WHERE Item.id = $id

出于某种原因,第一行 Division.id 没有多大意义,因为表不是 divisions 表,所以 Divisions.id 怎么可能来自项目

我的猜测是这一行: LEFT JOIN分区AS Division ON Division.id = Section.divison_id 设置 Division.id (在查询的第一行),所以这会找到所有 Item.id 等于 Division.id ????

我知道这可能很简单,但任何想法都会很棒。我有这个想法,我在这里不理解。如果有人可以直截了当,我将非常感激。

4 个答案:

答案 0 :(得分:1)

来自代表

的元组集
items AS Item
LEFT JOIN categories AS Category ON Category.id = Item.category_id
LEFT JOIN sections AS Section ON Section.id = Category.section_id
LEFT JOIN divisions AS Division ON Division.id = Section.divison_id

不只是来自物品

以上是

的外连接
   item     -> Category
   category -> Sections
   sections -> divisions

你可以在集合中获得所有列。然后应用where子句,只选择项id与$ id匹配的项。从这组连接列(元组)中,您只获取除法表中的id。

答案 1 :(得分:0)

您将从参与连接的所有表中选择任何列。

了解在此查询中,您不是从项目中选择列,而是从所有表中的连接生成的结果中选择列。因此,您可以访问参与联接的所有表中的任何列。

答案 2 :(得分:0)

我会尝试解释......

你想获得一个项目的devisionID。

我猜那个项目表没有分区ID。所以你需要得到它......

你是怎么得到的?

你链接到类别表trow项目表,然后链接到section table trow category table。

然后是trow类别表,你会得到除法表中的sectionid。

答案 3 :(得分:0)

想一想parens中的整个FROM块,并想象一下暂时由它产生的组合表。它将包含所有fiwksa ID itens categirues sectionsdivisions

SELECT Division.id 
(  
   FROM items AS Item 
   LEFT JOIN categories AS Category ON Category.id = Item.category_id 
   LEFT JOIN sections AS Section ON Section.id = Category.section_id 
   LEFT JOIN divisions AS Division ON Division.id = Section.divison_id
)
WHERE Item.id = $id 

这将返回最多一行,其中一个值来自“大”表 - Division.idItem.id给出$id。由于使用了LEFT JOINS,如果我们有一个id为$id的项目但在其他一个表中缺少满足您的连接条件的匹配项,则该值可能为null。