повтор запроса sql - PullRequest
       17

повтор запроса sql

0 голосов
/ 03 апреля 2012

Мой запрос похож на ниже (не работает правильно)

SELECT RentACar.dbo.Car.car_id as clm_CAR_ID,
RentACar.dbo.Car_Image.car_image_url as clm_PICTURE_URL,
RentACar.dbo.Users.user_agent_name as clm_USERNAME

from RentACar.dbo.Car

left join RentACar.dbo.Users
on RentACar.dbo.Car.car_user_id = RentACar.dbo.Users.user_id 

left join RentACar.dbo.Car_Image
on RentACar.dbo.Car.car_id = RentACar.dbo.Car_Image.car_image_car_id

Моя цель - показать все автомобили на car_table с именем пользователя user_table и picture_url из image_table.

Но в image_table у меня проблема .. У машины может быть больше, чем картинка.


результаты этого запроса;

clm_CAR_ID      clm_PICTURE_URL                                    clm_USERNAME         
1       NULL                                            ac ad
2       NULL                                            ac ad
3       NULL                                            ac ad
4       NULL                                            ac ad
5       /upload/10CeskUntitled23-11.png                                 ac ad
5       /upload/10CveloperDesktopdeskUntitl4ed-11.png                           ac ad
6       NULL                                            ac ad
7       NULL                                            ac ad
8       NULL                                            ac ad
9       /upload/9ngsdeveloperDesktopmelekkım.jpg                                    ac ad
9       /upload/9eskt1opmelekkktc.jpg                                   ac ad
10      /upload/10CeveloperDesktopd2eskxm.jpg                                   ac ad
10      /upload/10ngsdeveloperDesktopdeskxm.jpg                                 ac ad
10      /upload/10sdeveloperDesktopdeskU5ntitled-11.png                         ac ad

но мой результат экспирации

clm_CAR_ID      clm_PICTURE_URL                                    clm_USERNAME         
1       NULL                                            ac ad
2       NULL                                            ac ad
3       NULL                                            ac ad
4       NULL                                            ac ad
5       /upload/10CeskUntitled23-11.png                                 ac ad
6       NULL                                            ac ad
7       NULL                                            ac ad
8       NULL                                            ac ad
9       /upload/9ngsdeveloperDesktopmelekkım.jpg                                    ac ad
10      /upload/10CeveloperDesktopd2eskxm.jpg                                   ac ad

Ответы [ 3 ]

2 голосов
/ 03 апреля 2012

Поскольку вы не указали, какую СУБД вы используете, я публикую наиболее общий ответ, который я могу придумать:

SELECT  Car_ID AS clm_CAR_ID, 
        Car_Image_URL AS clm_PICTURE_URL,
        user_agent_name AS clm_USERNAME
FROM    Car
        INNER JOIN Users
            ON Car_User_ID = User_ID
        LEFT JOIN
        (   SELECT  Img.*
            FROM    Car_Image Img
                    INNER JOIN 
                    (   SELECT  MIN(Image_ID) AS Image_ID
                        FROM    Car_Image
                        GROUP BY Car_Image_Car_ID
                    ) AS MaxImg
                        ON MaxImg.Image_ID = Img.Image_ID
        ) AS Img
            ON Img.Car_Image_Car_ID = Car_ID;

Я проверил это на Это SQL Fiddle иэто работает для MySQL, MSSQL, PostgreSQL и SQLLite.У меня почти нет опыта работы с Oracle, поэтому я не смог исправить синтаксическую ошибку при тестировании с Oracle.

1 голос
/ 03 апреля 2012

Вы должны присоединиться к Car_Table, User_Table.
Затем присоедините его к Image_Table, чтобы содержит одну фотографию на машину.

SELECT car_id, user_name, image_url
FROM
   (Car_Table JOIN User_Table AS cars_and_photos ON car_user_id = user_id) JOIN
   (SELECT * FROM Image_Table GROUP_BY image_car_id) AS one_photo_per_car
ON one_photo_per_car.image_car_id = cars_and_photos.user_id

Я не проверял этот запрос

0 голосов
/ 03 апреля 2012
SELECT rentacar.dbo.car.car_id, 
       rentacar.dbo.car_image.car_image_url AS image, 
       rentacar.dbo.users.user_agent_name   AS USER 
from rentacar.dbo.car
left join rentacar.dbo.car_image
on rentacar.dbo.car.car_id = rentacar.dbo.car_image.image_car_id
left join rentacar.dbo.users
on rentacar.dbo.car.car_user_id = rentacar.dbo.users.user_id 
...