我有目的地ID,我想选择其他目的地,首先由指定目的地国家/地区订购,然后是其他目的地。 (最好不使用子查询)
destination:
- id
- name
destination_visa
- id_destination
- id_visa
visa
- id_visa
- country
如何选择指定目的地国家/地区,然后根据此目的地国家/地区订购其他目的地,最好不使用子查询?
SQLFiddle :http://sqlfiddle.com/#!2/31503/3
答案 0 :(得分:2)
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,nulls首先被排序,所以我用它来取消给定目的地的国家匹配。或者,您可以使用它来使意图更清晰:
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