Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как составить sql запрос

Неагент Ученик (118), на голосовании 1 год назад
выбрать все помещения из одной таблицы , и добавить к ним все фотографии объектов из другой.
если делаю left join до добавляется одна фотка. а их может быть много. (хотя мне нужна одна , но с меньшим индексом)
Голосование за лучший ответ
CausonQ Мудрец (13356) 1 год назад
Ну так покажи запрос, структуру БД
Татьяна Просветленный (36384) 1 год назад
Для того, чтобы выбрать все помещения из одной таблицы и добавить к ним все фотографии объектов из другой таблицы, можно использовать оператор LEFT JOIN. Однако, если делать LEFT JOIN, то добавится только одна фотография, хотя их может быть много. Чтобы добавить только одну фотографию с меньшим индексом, можно использовать подзапрос. Например, запрос может выглядеть так:
 SELECT * 
FROM rooms r
LEFT JOIN (
SELECT *
FROM photos p
WHERE p.room_id = r.id
ORDER BY p.index ASC
LIMIT 1
) p ON r.id = p.room_id;

В данном запросе мы выбираем все помещения из таблицы rooms и объединяем их с подзапросом, который выбирает только одну фотографию с меньшим индексом из таблицы photos. Подзапрос выбирает фотографии только для текущего помещения, используя условие WHERE p.room _id = r.id . Затем фотографии сортируются по индексу в порядке возрастания и выбирается только первая фотография с помощью LIMIT 1. Результатом запроса будет список всех помещений из таблицы rooms с одной фотографией из таблицы photos с меньшим индексом.
Sergio 2.1 Оракул (67477) 1 год назад
 SELECT помещения.*, фотографии.* 
FROM помещения
LEFT JOIN (
SELECT *, ROW_NUMBER() OVER(PARTITION BY объект ORDER BY индекс) as rn
FROM фотографии
) AS фотографии ON помещения.объект = фотографии.объект AND фотографии.rn = 1;
Этот запрос добавляет номер строки для каждого объекта в таблице фотографии, упорядоченный по индекс. Затем он присоединяет только те строки, где rn (номер строки) равен 1, что соответствует фотографии с наименьшим индексом для каждого объекта.

Пожалуйста, убедитесь, что вы заменили помещения, фотографии, объект и индекс на соответствующие имена ваших таблиц и столбцов.
НеагентУченик (118) 1 год назад
спасибо!!! даже не знаю что такое over. учиться и учиться . Сделал как-то иначе пока что , работает каким то чудом
Похожие вопросы