Is this what you had in mind?
select
d.id_destination, v.country, d.name
from
destination d
inner join destination_visa dv on dv.id_destination = d.id_destination
inner join visa v on dv.id_visa = v.id_visa
order by nullif (v.country, (select v2.country
from destination_visa dv2
inner join visa v2
on dv2.id_visa = v2.id_visa
where dv2.id_destination = 6));
還有一個子查詢,它可能被預選到變量中。
我不認爲子查詢應該提出一個問題,因爲它不與外部查詢相關,這意味着它應該只執行一次。至於排序,空值先排序,所以我用它來取消給定目的地的國家匹配。或者你可以用它來使打算更清楚:
order by case when v.country = (select v2.country
from destination_visa dv2
inner join visa v2
on dv2.id_visa = v2.id_visa
where dv2.id_destination = 6)
then 0 -- Move matching country to front
else 1 -- Not a matching country
end,
v.country
是的!你能解釋一下訂單嗎?另外,你可以談談使用子查詢這種方式的複雜性嗎? – brainydexter 2012-07-11 12:44:50
@brainydexter請再次檢查答案。 – 2012-07-11 12:51:18
完美!感謝你的解釋,另一個例子幫助我理解它。雖然我有一個與'nullif'相關的問題。如果條件爲真,則nullif返回null。但是,'ORDER BY TRUE'(或者'false',對於這個問題)呢? – brainydexter 2012-07-11 12:54:20