Как получить содержимое таблиц на основе левого соединения двух других таблиц - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть таблица categories и таблица files.есть таблица category_record_mm для хранения отношений.Я хочу получить категории файла, для этого я написал оператор JOIN, но JOIn жалуется, что files. uid не является допустимым столбцом.то, что я на самом деле хочу, это дать мне все категории, если category_record_mm. foreign_uid равно некоторому идентификатору.Вот что я написал:

SELECT * FROM `categories`
LEFT JOIN `category_record_mm` ON `category_record_mm`.`foreign_uid` = `files`.`uid`
WHERE (`category_record_mm`.`foreign_uid` = 123 )

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Если вы просто хотите категории, вам не нужно ссылаться на таблицу files.Вам просто нужно правильно сформулировать запрос:

SELECT c.*
FROM categories c JOIN
     category_record_mm cr
     ON cr.categories_uid = c.uid
WHERE cr.foreign_uid = 123;

Примечания:

  • * JOIN между двумя таблицами находится в столбцах категории , а не file столбцы.
  • Псевдонимы таблиц значительно упрощают написание и чтение запроса.
  • UID файла в category_record_mm.Вы фильтруете это, поэтому вам не нужно присоединяться к таблице files.
0 голосов
/ 19 февраля 2019

Вам не хватает 1 JOIN, то есть между categories и category_record_mm

Это похоже на 3 города, A, B и C, с мостом междуA и B и еще один между B и C.Нельзя перейти от A к C без использования моста между A и B

SELECT * FROM `categories`
LEFT JOIN `category_record_mm` ON `category_record_mm`.`categories_uid` = `categories`.`uid`
LEFT JOIN `files` ON `category_record_mm`.`foreign_uid` = `files`.`uid`
WHERE (`category_record_mm`.`foreign_uid` = 123 )

categories_uid, являющимся внешним ключом, ссылающимся на таблицу categories и categories. uid является первичным ключом categories

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