Я пытаюсь получить список свойств, и для этого мне нужно связать 4 таблицы. Таблицами являются: свойство, свойство_type, состояние и фотография.
Проблема получает ТОЛЬКО образ по умолчанию для свойства. По умолчанию используется фотография с наименьшим номером ранга. Поэтому, если для свойства 10 есть 2 фотографии, то в этом результирующем наборе должен быть тот, у кого значение более низкого ранга.
Взгляните на то, что у меня есть до сих пор, оно должно объяснить, что я сделал до сих пор. В основном это показывает список свойств, включая идентификатор фотографии, присвоенный этому свойству. К сожалению, поскольку я использую GROUP BY для устранения дополнительных результатов (не нужно 5 строк для одного свойства, если есть 5 фотографий, назначенных ему), упорядочение по рангу фотографии не меняет мои результаты, как я думал.
SELECT
property.property_id,
property.property_name,
state.state_id,
state.state_name,
photo.photo_id,
photo.rank
FROM property
JOIN photo
ON property.property_id = photo.property_id
JOIN property_type
ON property.property_type_id = property_type.property_type_id
JOIN state
ON property.state_id = state.state_id
GROUP BY property.property_id
ORDER BY
state.state_name ASC,
property.property_name ASC,
photo.rank ASC
Может ли кто-нибудь указать мне в правильном направлении? Одно замечание: я прихожу в этот проект, который уже завершен. Таким образом, структура базы данных в данный момент не может быть изменена.
Использование:
SELECT p.property_id,
p.property_name,
s.state_id,
s.state_name,
x.photo_id,
x.rank
FROM PROPERTY p
JOIN PHOTO x ON x.property_id = p.property_id
JOIN (SELECT ph.property_id,
MIN(ph.rank) AS min_rank
FROM PHOTO ph
GROUP BY ph.property_id) y ON y.property_id = x.property_id
AND y.min_rank = x.rank
JOIN PROPERTY_TYPE pt ON pt.property_type_id = p.property_type_id
JOIN STATE s ON s.state_id = p.state_id
GROUP BY p.property_id
ORDER BY s.state_name, p.property_name
Я изменил ваш запрос, чтобы сделать самосоединение с копией таблицы PHOTO
, чтобы получить минимальный ранг за значение property_id. Присоединившись к таблице PHOTO, я могу гарантировать, что будет возвращена только самая ранняя запись PHOTO.