选择在其他表中根据外键的存在命令的语句

时间:2018-01-21 17:25:58

标签: sql sqlite

我有两个表ab,其中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

1 个答案:

答案 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)上的索引。