Запрос с JOIN и алиасами при выборке подставляется последняя запись - MySQL

Узнай цену своей работы

Формулировка задачи:

Добрый вечер! Если честно минут 30 думал как правильно поставить вопрос. Есть две таблицы Таблица 1 position
Листинг программы
  1. CREATE TABLE IF NOT EXISTS `position` (
  2. `id_position` BIGINT(20) UNSIGNED NOT NULL,
  3. `name_position` VARCHAR(100) NOT NULL
  4. ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
Ее содержимое
Листинг программы
  1. INSERT INTO `position` (`id_position`, `name_position`) VALUES
  2. (1, 'Директор'),
  3. (2, 'Зам по икт');
Таблица 2 teachers
Листинг программы
  1. CREATE TABLE IF NOT EXISTS `teachers` (
  2. `id_teacher` BIGINT(20) UNSIGNED NOT NULL,
  3. `fileName` VARCHAR(100) NOT NULL,
  4. `name` VARCHAR(100) NOT NULL,
  5. `lastName` VARCHAR(100) NOT NULL,
  6. `p1` INT(11) NOT NULL,
  7. `p2` INT(11) NOT NULL
  8. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
Ее содержимое
Листинг программы
  1. INSERT INTO `teachers` (`id_teacher`, `fileName`, `name`, `lastName`, `p1`, `p2`) VALUES
  2. (1, 'Иван', 'Ивано', 'Иванович', 1, 2);
Делаю такого вида запрос
Листинг программы
  1. SELECT `teachers`.`id_teacher`, `teachers`.`firstName`, `teachers`.`name`, `teachers`.`lastName`, `i1`.`name_position`, `i2`.`name_position`
  2. FROM `teachers`
  3. INNER JOIN `position` `i1` ON teachers.p1 = i1.id_position
  4. INNER JOIN `position` `i2` ON teachers.p2 = i2.id_position
  5. WHERE `id_teacher` = 1
Ожидаю получить что то типа

Иван, Иванов, Иванович, Директор, Зам по икт

Но в место этого получаю

Иван, Иванов, Иванович, Зам по икт

Не знаю правильно ли поставил вопрос, весь день читаю и читаю про join и как алиасы ставить но запрос составить не удалось, можете помочь?

Решение задачи: «Запрос с JOIN и алиасами при выборке подставляется последняя запись»

textual
Листинг программы
  1. SELECT t.lastName, tt.np
  2. FROM teachers t
  3. LEFT JOIN (
  4.   SELECT id_teacher, GROUP_CONCAT(name_position ORDER BY tp.priority ASC SEPARATOR ', ' ) AS np
  5.   FROM teachers_positions tp
  6.   LEFT JOIN POSITION p ON p.id_position = tp.id_position
  7.   GROUP BY tp.id_teacher
  8. ) tt ON t.id_teacher = tt.id_teacher

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы