我有两个表a
和b
,其中b
包含一个外键fk_a_id
到表a
id列。
现在我想在表a
上选择,但是根据表b
是否有外键条目来排序结果。表b
没有条目的行应该是第一个。
除了连接之外,我还没有尝试过多少,这可能不是正确的方向。
select a.*
from a as a
join b as b on b.fk_a_id = a.id
order by id desc
答案 0 :(得分:2)
一种方法是left join
。但如果b
包含给定键的多个实例,则可能会重复行。
另一种方法使用order by
中的逻辑:
select a.*
from a
order by (case when not exists (select 1 from b where b.fk_a_id = a.id) then 1 else 2 end),
id desc;
为了提高性能,您需要b(fk_a_id)
上的索引。