Помогите переписать вложенный запрос

  • Автор темы Автор темы Yurko
  • Дата начала Дата начала

Yurko

Новичок
Помогите переписать вложенный запрос

Есть таблица домов: condos(condo_id, name) и
фотографий домов: condo_photos(id, condo_id, photo).
Фотографий дома может быть несколько, а может не быть вообще.
Необходимо вывести список домов, причем в качестве фотографии указать первую фотографию, если фотографий несколько. Первой является та фотография, у которой id - минимальный.
Вот какой запрос я написал:

SELECT C.name, C.condo_id, CP.photo, CP.id
FROM `condos` C, `condo_photos` CP
WHERE CP.condo_id = C.condo_id
AND CP.id = (
SELECT MIN( id )
FROM `condo_photos`
WHERE condo_id = C.condo_id ) ORDER BY C.name

На Mysql 4.1.8 этот запрос прекрасно работает, а вот на Mysql 4.1.18 выдает ошибку.
Насколько я понял, ругается на вложенный запрос.
Существует ли способ, как можно переписать этот запрос, без использования вложенного запроса?
 
то, что 4.1.8 < 4.1.18, тебе ни о чем не говорит? :-)
 
Автор оригинала: akd
то, что 4.1.8 < 4.1.18, тебе ни о чем не говорит? :-)
Ну как минимум это меня удивило - что на более поздней версии не работает.
Я не знаю, может быть причина не во вложенном запросе, но по-моему все-таки в нем.
 
Yurko, может стоит прочитать сообщение об ошибке, перевести его и попробовать понять, чего от тебя хотят?
 
akd
Ладно, раз уж вы так настаиваете:

Вот исходный запрос:
SELECT C.name, C.condo_id, CP.photo, CP.id
FROM `condos` C, `condo_photos` CP
WHERE CP.condo_id = C.condo_id AND CP.id = (
SELECT MIN( id )
FROM `condo_photos`
WHERE condo_id = C.condo_id )
ORDER BY C.name

Ответ MySQL:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT MIN( id )
FROM `condo_photos`
WHERE condo_id = C.cond

Ну и как мне может помочь это сообщение об ошибке?
 
оно может помочь тебе пройти в нужный раздел мануала для нужной версии MySQL server и почитать.
 
Автор оригинала: akd
оно может помочь тебе пройти в нужный раздел мануала для нужной версии MySQL server и почитать.
Слушайте, я это и без вас знаю, что где-то в мануале об этом написано.
Если не хотите помочь, зачем тему засорять?
 
Yurko, ну раз все знаешь, то зачем здесь спрашивать?
 
SELECT condos.name, condos.condo_id, PH.photo, PH.id
FROM condos LEFT JOIN
(SELECT condo_id, min_id as id, photo
FROM
(SELECT condo_id, min(id) AS min_id
FROM condos JOIN condo_photos ON condos.condo_id = condo_photos.condo_id
GROUP BY condo_id
) AS mins
JOIN condo_photos ON min_id = condo_photos.id
) AS PH
ON condos.condo_id = PH.condo_id
 
Trianon
Спасибо большое, вы подсказали мне правильное направление.
Вот запрос, который правильно работает под MySQL 4.1.18 и без вложенных запросов:

SELECT C.condo_id, C1.name, min( CP.id ) AS min_id, CP1.photo
FROM condos C
LEFT JOIN condo_photos CP ON C.condo_id = CP.condo_id
JOIN condos C1 ON C.condo_id = C1.condo_id
LEFT JOIN condo_photos CP1 ON CP.id = CP1.id
WHERE C.hot_f =1
GROUP BY CP.condo_id
 
Сверху