MySQL LEFT JOIN удаляет столбец сравнения при сбое? - PullRequest
0 голосов
/ 20 декабря 2018

Схема таблицы MySQL: сущность (ключ: entityId), запись (ключ: entityId), фотография (ключ: entityId)

В комбинированных таблицах post + photo объект будет 1: 1, какв основном это подкатегории объекта Entity

sql request:

SELECT * FROM entity
LEFT JOIN post ON post.entityId = entity.entityId
LEFT JOIN photo ON photo.entityId = entity.entityId

Возвращает полную схему, но для объектов, у которых нет фотографии, возвращаемый entityId равен нулю.Каждая строка, в которой нет соответствующей фотографии, имеет свой entityId, установленный в null.

ВОПРОС: Какой самый чистый способ объединить эти подгруппы при сохранении всех данных?Мне удалось сделать это, выполнив только одно обычное соединение с постами, а затем объединить его с другим объектом, объединенным с фотографиями, но мое решение очень грязное, и, возможно, есть лучший способ сделать это.

1 Ответ

0 голосов
/ 20 декабря 2018

Вам нужно явно перечислить столбцы.Проблема в том, что столбцы имеют одинаковое имя.Например:

SELECT e.*, pid as post_id, ph.id as photo_id
FROM entity e LEFT JOIN
     post p
     ON p.entityId = e.entityId LEFT JOIN
     photo ph
     ON ph.entityId = e.entityId;

Если единственными столбцами, которые имеют повторяющиеся идентификаторы, являются столбцы entityId, то можно использовать предложение USING (при условии, что ваша база данных поддерживает его):

SELECT *
FROM entity e LEFT JOIN
     post p
     USING (entityId) LEFT JOIN
     photo ph
     USING (entityId)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...