我如何根据指定的目的地国家/地区订购目的地?

时间:2012-07-11 11:40:03

标签: mysql sql

我有目的地ID,我想选择其他目的地,首先由指定目的地国家/地区订购,然后是其他目的地。 (最好不使用子查询)

destination:
- id
- name

destination_visa
- id_destination
- id_visa

visa
- id_visa
- country

如何选择指定目的地国家/地区,然后根据此目的地国家/地区订购其他目的地,最好不使用子查询?

SQLFiddle http://sqlfiddle.com/#!2/31503/3

1 个答案:

答案 0 :(得分:2)

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,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