2012-04-03 165 views
0

我的查询是这样设置(不能正常工作)SQL查询重复

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 user_name和 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 

但我expaction结果

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 
+1

如何处理拥有多个图像的汽车 - 每辆汽车每张图像一排,每辆汽车一行,汽车首张(或最后一张)图像,每辆汽车一行,或连接成一个单一的领域......?另外,这是SQLServer? – 2012-04-03 12:31:31

+0

你可以在你的问题中发布你期望的输出吗? – GarethD 2012-04-03 14:09:35

+0

@GarethD编辑我的职务 – Mehmet 2012-04-03 15:24:05

回答

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进行测试时修复语法错误。

+0

感谢GarethD我尝试这回每一辆汽车,但结果是错误的:( '选择car_id,USER_NAME,car_image_url FROM RentACar.dbo.Car INNER JOIN RentACar.dbo.Users ON car_user_id = USER_ID LEFT JOIN (SELECT图。* FROM 图RentACar.dbo.Car_Image INNER JOIN (SELECT MAX(car_image_id)AS Image_ID FROM RentACar.dbo.Car_Image GROUP BY car_image_car_id)AS MaxImg ON MaxImg .Image_ID = Img.car_image_id)AS Img ON Img.car_image_id = car_id' – Mehmet 2012-04-03 13:41:05

+0

你能否给我一个线索,看看结果出了什么问题?当我不知道问题是什么时,纠正某些事情是相当困难的。 – GarethD 2012-04-03 13:43:59

+0

RentACar.dbo.Car上有5张车图片。当查询运行时,程序只返回两个车号为6和9的图像,但车号为6的车没有图像。 – Mehmet 2012-04-03 13:55:28

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 

我没有测试此查询

+0

喜雅罗斯瓦夫我没有运行此, '选择RentACar.dbo.Car.car_id,RentACar.dbo.Users.user_agent_name,RentACar.dbo.Car_Image.car_image_url FROM (RentACar.dbo.Car JOIN RentACar.dbo.Users ON RentACar.dbo.Car.car_user_id = USER_ID)AS cars_and_photos JOIN (SELECT * FROM RentACar.dbo.Car_Image GROUP_BY RentACar.dbo.Car_Image.car_image_car_id)AS one_photo_per_car ON one_photo_per_car.image_car_id = cars_and_photos.user_id '结果 **消息156,级别15,状态1,行3 关键字'AS'附近的语法不正确。 Msg 102,Level 15,State 1,Line 5 'RentACar'附近的语法不正确。** – Mehmet 2012-04-03 13:18:30

+0

尝试'SELECT RentACar.dbo.Car.car_id,RentACar.dbo.Users.user_agent_name,RentACar.dbo.Car_Image.car_image_url FROM (RentACar.dbo.Car JOIN RentACar.dbo.Users AS cars_and_photos ON RentACar.dbo.Car.car_user_id = user_id)JOIN(SELECT * FROM RentACar.dbo.Car_Image GROUP BY RentACar.dbo.Car_Image.car_image_car_id)AS one_photo_per_car ON one_photo_per_car。 image_car_id = cars_and_photos.user_id' – 2012-04-03 14:01:56

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 
+0

感谢Hagbart席琳这也跑不过, 'SELECT DISTINCT RentACar.dbo.Car.car_id, RentACar.dbo.Car_Image.car_image_url为Resim, RentACar.dbo.Users.user_agent_name为Sahip 来自RentACar.dbo的 。汽车 左加入RentACar.dbo.Car_Image 上RentACar.dbo.Car.car_id = RentACar.dbo.Car_Image.car_image_car_id 左连接上RentACar.dbo.Car.car_user_id = RentACar.dbo.Users RentACar.dbo.Users 。 user_id' 程序返回Image_Table中有多少辆车的图片数量。我从这项计划希望只有一次 – Mehmet 2012-04-03 13:10:58