MySQL SQL Query Вопрос из учебника - PullRequest
0 голосов
/ 04 марта 2011

Я читаю учебник, и я просто хотел убедиться, что он написан правильно для моего понимания.

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 не имеет особого смысла, потому что таблица items не является таблицей Divisions , так как же Divisions.id может быть FROM items ?

Я предполагаю, что эта строка: ВЛЕВО СОЕДИНЯЕТ деления AS Division ON Division.id = Section.divison_id устанавливает Division.id (в первой строке запроса), так что это будет выглядеть для всех Item.id , которые равны Division.id ????

Я знаю, что это, вероятно, глупо, но любые идеибыло бы замечательно.У меня есть идея, я не понимаю что-то здесь.Если кто-то может исправить меня, будет очень признателен.

Ответы [ 4 ]

1 голос
/ 04 марта 2011

Это из набора кортежей, представляющих

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.Из этого набора объединенных столбцов (кортежей) вы берете только идентификатор из таблицы деления.

0 голосов
/ 04 марта 2011

Просто подумайте о целом блоке FROM в скобках и представьте комбинированную таблицу, которая временно получается из нее. Он будет иметь все идентификаторы fiwksa 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. Поскольку используются ЛЕВЫЕ СОЕДИНЕНИЯ Значение может быть нулевым в том случае, если используется элемент с идентификатором $id, но в одной из других таблиц отсутствуют совпадения, удовлетворяющие условиям соединения.

0 голосов
/ 04 марта 2011

я попытаюсь объяснить ...

вы хотите получить devisionID элемента.

я думаю, что таблица элементов не имеет идентификатора деления.так что вам нужно его получить ...

как вы его получили?

вы делаете ссылку на таблицу элементов таблицы объектов категории, а затем вы ссылаетесь на таблицу категорий категории продуктов таблицы

и затем таблица категорий trow, вы получаете идентификатор раздела в таблице деления.

0 голосов
/ 04 марта 2011

Вы сможете выбрать любые столбцы из всех таблиц, которые участвуют в объединениях.

Следует понимать, что в этом запросе вы не выбираете столбцы из элементов, а выбираете столбцы из результата, созданного объединениями из всех таблиц. Следовательно, вы можете получить доступ к любому столбцу из всех таблиц, участвующих в объединениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...