2

考虑名为 A 的下表:

  State City Rank
   S     C    1
  AB     C1   2
   *     C2   3

我想选择所有列

  1. 如果 State 为 AB,则返回所有此类行
  2. 如果不满足条件 1,则返回状态为 * 的所有行。如果满足条件 1,请不要关注此条件

按照上面的例子,我应该得到第 2 行。我尝试了几件事,比如

select state
     case when a.state = 'AB' then 1
           when a.state = '*'  then 2
      end as priority   from A  where state in  ('AB','*')  order by priority

但上面的查询返回不止一行。我想要与上述条件匹配的确切一行。

请帮忙

编辑1:

由于性能问题,我想避免子查询。

4

1 回答 1

3

尝试这个:

select * from A
where state=case
  when exists(select * from A where state='AB') then 'AB'
  else '*'
  end

这是演示上述内容的SQL Fiddle 。

于 2013-10-18T19:05:31.567 回答