当我在sql中使用in
关键字时,可能会缺少一些id,但我希望将它们视为存在,其他列为null或0。
例如,假设我有一个包含两列和一些行的表:
[id,value1]
1 1
2 4
3 3
5 5
我可以这样写sql:select * from table where id in (1,4,5) order by value1 limit 0,2 ;
当执行这个sql时,返回的结果是[(1,1),(5,5)]。
但我想要的是[(4,0),(1,1)],因为我想把缺失的id 4当作它存在于表中。
所以问题是:是否有一些优雅的方法来实现它使用sql而不是选择所有的行,并在内存中排序。
使用left join
:
select *
from (select 1 as id union all
select 4 union all
select 5
) i left join
table t
using (id)
order by t.value1
limit 0, 2 ;
请注意,您是按现有表中的一个值排序的,因此这取决于NULL
在其他值之前排序的事实。