我正在阅读一个教程,我只是想确保它是为了我自己的理解而写的。
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 ????
我知道这可能很简单,但任何想法都会很棒。我有这个想法,我在这里不理解。如果有人可以直截了当,我将非常感激。
答案 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
sections
和divisions
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
由Item.id
给出$id
。由于使用了LEFT JOINS,如果我们有一个id为$id
的项目但在其他一个表中缺少满足您的连接条件的匹配项,则该值可能为null。