2012-04-03 168 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