我的查询如下(不正常)
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
答案 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