我有这个问题:
SELECT B.IMAGE_ID as image_id_fav,I.Image_Path as image_path_fav
FROM Buddies B
INNER JOIN @favDT F ON F.favorite_id = B.Reg_ID and b.favorite_id=@regID
INNER JOIN Images I ON I.Image_ID = B.Image_ID
where b.Image_ID >0
union all
select I.image_id as image_id_fav,I.Image_Path as image_path_fav FROM Buddies B
inner join @favDT F ON F.favorite_id = B.Reg_ID and b.favorite_id=@regID
inner join registration R on R.Reg_ID = F.favorite_id
INNER JOIN Images I ON R.Default_Image = I.Image_ID
WHERE B.Image_ID=0
union all
SELECT I.IMAGE_ID as image_id_fav, I.IMAGE_PATH as image_path_fav FROM @favDT F
LEFT OUTER JOIN Buddies B ON B.Reg_ID = F.favorite_id and b.favorite_id=@regID
INNER JOIN registration R on R.Reg_ID =F.favorite_id
INNER JOIN Images I ON R.Default_Image = I.Image_ID
WHERE B.Reg_ID IS NULL
我需要通过F.favorite_id订购,但我一直在关键字union all附近得到错误的语法
答案 0 :(得分:2)
当您使用UNION时,您无法对各个查询进行排序,并希望它按您想要的顺序返回。但是你可以在最后添加订单。 在您的情况下,您正在尝试按顺序排序您未选择的列。
你可以简单地将favorite_id添加到每个选择中,然后添加一个外部查询,它只返回你想要的两个列,但是按favorite_id排序:
SELECT image_id_fav,image_path_fav
FROM (
select B.IMAGE_ID as image_id_fav, I.Image_Path as image_path_fav,
F.favorite_id as FavID
from Buddies B
inner join @favDT F on F.favorite_id = B.Reg_ID and b.favorite_id = @regID
inner join Images I on I.Image_ID = B.Image_ID
where b.Image_ID > 0
union all
select I.image_id as image_id_fav, I.Image_Path as image_path_fav,
F.favorite_id
from Buddies B
inner join @favDT F on F.favorite_id = B.Reg_ID and b.favorite_id = @regID
inner join registration R on R.Reg_ID = F.favorite_id
inner join Images I on R.Default_Image = I.Image_ID
where B.Image_ID = 0
union all
select I.IMAGE_ID as image_id_fav, I.IMAGE_PATH as image_path_fav,
F.favorite_id
from @favDT F
left outer join Buddies B on B.Reg_ID = F.favorite_id and b.favorite_id = @regID
inner join registration R on R.Reg_ID = F.favorite_id
inner join Images I on R.Default_Image = I.Image_ID
where B.Reg_ID is null
)
ORDER BY FavID
答案 1 :(得分:1)
在Union All
构造中,您不能单独订购每个语句。您必须在完整查询结束时放置ORDER BY
子句。
以下是详细说明:
因此,您必须首先在SELECT列表中包含F.favourite_id
列,然后它将在最后一个ORDER BY子句中可见。