create table items (
name varchar(15) not null,
id1 integer,
id2 integer,
UNIQUE(id1),
UNIQUE(id2)
);
insert into items (name, id1, id2) values
('a', 1, null),
('b', 2, null),
('c', null, 2);
select * from items where id1=2
union
select * from items where id2=2
and id2 not in (select id2 from items where id1=2);
我有一个表,其中有多个字段包含属于给定项的唯一ID。在我的示例中,id1
或id2
包含此值。我的目标是,如果无法通过id1
找到项,则仅依赖id2
。因此,在我的示例中,我希望总是返回b
。
我已经设法通过一个联盟来实现这个功能,但是这看起来是一个非常笨拙的解决方案,而且性能很差。在我看来,一个更好的解决方案是在客户端进行过滤。你觉得呢?
2条答案
按热度按时间zzzyeukh1#
我们可以在这里使用
ROW_NUMBER
:每个逻辑记录对都用
COALESCE(id1, id2)
来描述(如果存在记录对的话),在每个记录对中,我们选择具有 * 最小 *id1
值的记录,这意味着非空记录。xyhw6mcr2#
我会用
这依赖于
FALSE < TRUE
.