Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
mfazio
Starting Member
17 Posts |
Posted - 2005-12-24 : 00:05:21
|
Hi guys, got myself into a pickle.. again Basically, ive created a vehicle search... here is my current sql statement.SELECT Vehicles.StockNumber, Models.Model, Makes.Make, Vehicles.Year, Vehicles.Colour, Vehicles.Gears, Vehicles.Transmission, Vehicles.EngineCapacity, Vehicles.Turbo, Vehicles.FuelType, Vehicles.Gas, Vehicles.BodyType, Vehicles.Odometer, Vehicles.RetailPrice, Vehicles.Comments, Images.ImageIDFROM Vehicles INNER JOIN Models ON Vehicles.ModelID = Models.ModelID INNER JOIN Makes ON Models.MakeID = Makes.MakeID LEFT OUTER JOIN Images ON Vehicles.StockNumber = Images.StockNumberWHERE (@MakeID = 0 OR Models.MakeID = @MakeID) AND (@ModelID = 0 OR Vehicles.ModelID = @ModelID) AND (@MinPrice = 0 OR Vehicles.RetailPrice >= @MinPrice) AND (@MaxPrice = 0 OR Vehicles.RetailPrice <= @MaxPrice) AND (@MinYear = 0 OR Vehicles.Year >= @MinYear) AND (@MaxYear = 0 OR Vehicles.Year <= @MaxYear)You can really forget all the WHERE statements... but basically i want the vehicles to list with only the FIRST imageID from the image table associated to it...In other words, vehicles table has an assosiated image tableMAKES 1---m MODELS 1---m VEHICLES 1---m IMAGESI want all vehicles based on my sql statement and only the FIRST image from the image table corresponding to the vehicle, if there is an image present...Thanks guys |
|
|
TG
Master Smack Fu Yak Hacker
6065 Posts |
Posted - 2005-12-24 : 09:42:55
|
Well you'll need to decide what determines the order of images but assuming it's ImageID then here are 3 alternatives as replacements for you join to Images:LEFT OUTER JOIN Images ON Vehicles.StockNumber = Images.StockNumber and Images.ImageID = (select top 1 imageid from Images z where z.StockNumber = Vehicles.StockNumber order by imageid asc)LEFT OUTER JOIN Images ON Vehicles.StockNumber = Images.StockNumber and Images.ImageID = (select min(z.ImageID) from Images z where z.StockNumber = Vehicles.StockNumber)LEFT OUTER JOIN Images (select StockNumber, min(ImageID) ImageID from Images group by StockNumber) as Images ON Vehicles.StockNumber = Images.StockNumber You can try (modify as needed) these and compare the plans/execution times to see which works best for your actual data.Be One with the OptimizerTG |
 |
|
|
mfazio
Starting Member
17 Posts |
Posted - 2005-12-24 : 10:19:10
|
| Once again the people dont fail me.Thanks mate, soloutions were spot on.Have a merry christmas, if your into that sorta thing. |
 |
|
|
|
|
|
|
|