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

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 выдает ошибку.
Насколько я понял, ругается на вложенный запрос.
Существует ли способ, как можно переписать этот запрос, без использования вложенного запроса?
 

akd

dive now, work later
Команда форума
то, что 4.1.8 < 4.1.18, тебе ни о чем не говорит? :)
 

Yurko

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

akd

dive now, work later
Команда форума
Yurko, может стоит прочитать сообщение об ошибке, перевести его и попробовать понять, чего от тебя хотят?
 

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

Ну и как мне может помочь это сообщение об ошибке?
 

akd

dive now, work later
Команда форума
оно может помочь тебе пройти в нужный раздел мануала для нужной версии MySQL server и почитать.
 

Yurko

Новичок
Автор оригинала: akd
оно может помочь тебе пройти в нужный раздел мануала для нужной версии MySQL server и почитать.
Слушайте, я это и без вас знаю, что где-то в мануале об этом написано.
Если не хотите помочь, зачем тему засорять?
 

akd

dive now, work later
Команда форума
Yurko, ну раз все знаешь, то зачем здесь спрашивать?
 

Trianon

Новичок
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
 

Yurko

Новичок
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
 
Сверху