Попытка объединения нескольких таблиц в mysql - ошибка 1054, неизвестный столбец - PullRequest
0 голосов
/ 04 мая 2020

Я хочу объединить несколько таблиц, используя JOIN, и mysql / mariadb отказывается найти один столбец. Конечно, столбец существует, и я не могу понять, в чем причина.

Макет таблицы

CREATE TABLE `shops` (
  `id` int(11) NOT NULL,
  `name` varchar(32) NOT NULL,
);

CREATE TABLE `shops2categories` (
  `shopid` int(11) NOT NULL,
  `categoryid` int(11) NOT NULL,
);

CREATE TABLE `categories` (
  `id` int(11) NOT NULL,
  `name` varchar(64) NOT NULL,
);

CREATE TABLE `categories2items` (
  `itemid` int(11) NOT NULL,
  `categoryid` int(11) NOT NULL
);

CREATE TABLE `items` (
  `id` int(11) NOT NULL,
  `name` varchar(32) NOT NULL,
);

Запрос: Чтобы избежать путаницы с псевдонимами, я теперь выполнил запрос с исходными именами таблиц.

SELECT
shops.name,
categories.name,
items.name

FROM shops

LEFT JOIN shops2categories ON shops2categories.shopid = shops.id
LEFT JOIN categories2items ON categories2items.categoryid = categories.id

LEFT JOIN categories ON categories.id = shops2categories.categoryid
LEFT JOIN items ON items.id = categories2items.itemid

Сообщение об ошибке:

#1054 - Unknown column 'categories.id' in 'on clause'

Независимо от того, как я реструктурировал свой запрос (сначала внешний ключ, сначала первичный ключ, сначала таблица элементов, сначала таблица категорий ..., используя разные типы JOIN), я не могу заставить это работать. Также я прочитал много SO вопросов к этой топике c, но я чувствую, что порядок правильный, я не вставляю и не обновляю, и речь не идет о цитировании. Что-то принципиально сломано в моей концепции, и я очень хочу узнать, что это может быть.

1 Ответ

1 голос
/ 04 мая 2020

Посмотрите на ваше предложение from. Вы ссылаетесь на c.id до того, как вы определили c.

На таблицу нельзя ссылаться, пока она не определена в предложении FROM.

Казалось бы, вы хотите:

FROM shops s LEFT JOIN
     shops2categories s2c
     ON s2c.shopid = s.id LEFT JOIN
     categories c
     ON c.id = s2c.categoryid LEFT JOIN
     categories2items c2i
     ON c2i.categoryid = c.id LEFT JOIN
     items i
     ON i.id = c2i.itemid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...