sql查询重复

时间:2012-04-03 12:26:50

标签: sql repeat

我的查询如下(不正常)

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_ur的picture_ur。

但是在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 个答案:

答案 0 :(得分:2)

由于您没有指定您正在使用的RDBMS,我发布了最常用的答案:

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;

我在This SQL Fiddle上对此进行了测试,它适用于MySQL,MSSQL,PostgreSQL和SQLLite。我几乎没有使用Oracle的经验,因此在使用Oracle进行测试时无法修复语法错误。

答案 1 :(得分:1)

您应该加入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

我没有测试此查询

答案 2 :(得分:0)

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