Переместите свой оператор JOIN
рядом с таблицей, к которой вы присоединяетесь:
SELECT
i.*,
r.name AS roomname,
c.name AS cat,
p.key AS imgkey,
p.extension AS imgext
FROM
items i
LEFT JOIN photos p
ON p.referencekey = i.key,
rooms r,
categories c
WHERE
i.room = r.key
AND r.key = 663308
AND i.sitekey = 32201
AND c.key = i.categorykey
Длинное объяснение:
A JOIN
является частью выражения, которое приводит кисходная таблица, используемая в предложении FROM
как from_item .Ваше предложение FROM
содержит 3 from_item исходных таблиц:
items
rooms
categories
, присоединенных к photos
Ошибка в ON
join_condition вашего categories
присоединенного к photos
from_item .Вы ссылаетесь на таблицу items
, которой нет в from_item .Решение состоит в том, чтобы переместить объединение photos
в items
from_item , чтобы у вас были следующие исходные таблицы from_item :
items
присоединился к photos
rooms
categories
К сожалению, я не могу найти пример в документации, который проясняет эту связьмежду таблицей в предложении FROM
и JOIN
.SELECT
Сводка показывает этот синтаксис и является лучшим источником в документации, чтобы найти это различие.Обратите внимание на то, что JOIN
не является родственным условием для FROM
, но фактически является частью from_item в пределах предложения FROM
.Таким образом, если ваше предложение FROM
состоит из списка таблиц, каждая таблица в этом списке может иметь свои собственные объединения.Тогда становится более интуитивно понятно, что каждая таблица, участвующая в объединении, должна быть включена в один from_item .