@Div-Man

Почему не добавляется ещё один LEFT JOIN?

Не понимаю, почему не работает, когда я присоединяю ещё одну таблицу?
Почему-то ругается на этот join

LEFT JOIN category_letter_master ON category_letter_master.masters_id  = master_user.master_id


Статический анализ:
 
Найдено 2 ошибок при анализе.
 
Этот тип предложения ранее анализировался. (near "LEFT JOIN" at position 233)
Неизвестный оператор. (near "LEFT JOIN" at position 233)
SQL запрос:
 
SELECT master_user.master_id, masters.specialization, COUNT(*) FROM master_user LEFT JOIN masters ON master_user.master_id = masters.id WHERE city_id = 4019 LEFT JOIN category_letter_master ON category_letter_master.masters_id = master_user.master_id GROUP BY master_user.master_id
 
Ответ MySQL:
 
#1064 - У вас ошибка в запросе. Изучите документацию по используемой версии MySQL на предмет корректного синтаксиса около 'LEFT JOIN category_letter_master ON category_letter_master.masters_id  = master_' на строке 5


Вот так работает

SELECT master_user.master_id,
masters.specialization,
COUNT(*) FROM master_user
LEFT JOIN masters ON master_user.master_id = masters.id
        WHERE city_id = 4019
GROUP BY master_user.master_id


А если добавить ещё один join, то не работает, почему?

CREATE TABLE `master_user` (
  `id` int(10) UNSIGNED NOT NULL,
  `user_id` int(11) NOT NULL,
  `master_id` int(11) NOT NULL,
  `city_id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
 
--
-- Дамп данных таблицы `master_user`
--
 
INSERT INTO `master_user` (`id`, `user_id`, `master_id`, `city_id`) VALUES
(15, 16, 3, 4019),
(18, 16, 5, 4019),
(19, 16, 4, 4019),
(20, 16, 2, 4019),
(21, 17, 4, 4019),
(22, 17, 2, 4400);
 
--
-- Индексы сохранённых таблиц
--
 
--
-- Индексы таблицы `master_user`
--
ALTER TABLE `master_user`
  ADD PRIMARY KEY (`id`);
 
--
-- AUTO_INCREMENT для сохранённых таблиц
--
 
--
-- AUTO_INCREMENT для таблицы `master_user`
--
ALTER TABLE `master_user`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=23;
COMMIT;


--
-- Структура таблицы `category_letter_master`
--
 
CREATE TABLE `category_letter_master` (
  `id` int(10) UNSIGNED NOT NULL,
  `category_letter_id` int(11) NOT NULL,
  `master_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
 
--
-- Дамп данных таблицы `category_letter_master`
--
 
INSERT INTO `category_letter_master` (`id`, `category_letter_id`, `master_id`) VALUES
(1, 1, 1),
(2, 4, 2),
(3, 5, 3),
(4, 17, 4),
(5, 17, 5),
(7, 12, 7);
 
--
-- Индексы сохранённых таблиц
--
 
--
-- Индексы таблицы `category_letter_master`
--
ALTER TABLE `category_letter_master`
  ADD PRIMARY KEY (`id`);
 
--
-- AUTO_INCREMENT для сохранённых таблиц
--
 
--
-- AUTO_INCREMENT для таблицы `category_letter_master`
--
ALTER TABLE `category_letter_master`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;
COMMIT;


--
-- Структура таблицы `masters`
--

CREATE TABLE `masters` (
  `id` int(10) UNSIGNED NOT NULL,
  `specialization` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Дамп данных таблицы `masters`
--

INSERT INTO `masters` (`id`, `specialization`) VALUES
(1, 'Алмазная резка'),
(2, 'Гипсокартон'),
(3, 'Двери'),
(4, 'Пол'),
(5, 'Потолок'),
(7, 'Кладка');

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `masters`
--
ALTER TABLE `masters`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `masters`
--
ALTER TABLE `masters`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;
COMMIT;
  • Вопрос задан
  • 433 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
... WHERE city_id = 4019 LEFT JOIN ...
После WHERE не может быть JOIN'ов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
JOIN идут друг за другом

Структура SQL запроса такая:
SELECT * FROM table
LEFT JOIN table1 ON...
LEFT JOIN table2 ON ....
INNER JOIN table3 ON ...
WHERE ....
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы