我想构建返回唯一ID的SQL查询。 我的问题是我需要添加另一个条件来查询我是否有多个结果。
select u.id
from users u
where u.id in ('1','2','3')
and u.active = 'Y'
如果我得到多个结果,我需要添加:
and u.active_contact = 'Y'
我尝试构建此查询
select * from (
select u.id, count(u.id) as results
from users u
where u.id in ('1','2','3')
and u.active = 'Y'
group by u.id
) tab
If(tab.results > 1) then
where tab.u.active_contact = 'Y'
end
先谢谢。
希望我能够很好地解释自己。答案 0 :(得分:0)
这是一种不同的方法:
SELECT id
FROM (SELECT id, (CASE WHEN active ='Y' THEN 1 ELSE 0 END) + (CASE WHEN active_contact ='Y' THEN 1 ELSE 0 END) as actv FROM users ORDER BY actv DESC)
WHERE actv > 0
LIMIT 1
子查询添加了一个聚合active
和active_contact
的列。然后主SELECT
优化这两个字段的组合,至少需要其中一个字段。我相信这可以提供预期的结果。
答案 1 :(得分:0)
在解决这个问题的可能方法中,有两个。
1)使用active_contact id。如果没有人使用其他身份证。
select coalesce( max(case when active_contact = 'Y' then id end), max(id) ) as id
from users
where id in ('1','2','3')
and active = 'Y';
2)首先排序active_contact。然后得到第一条记录。
select id
from
(
select id
from users
where id in ('1','2','3')
and active = 'Y'
order by case when active_contact = 'Y' then 1 else 2 end
) where rownum = 1;
答案 2 :(得分:0)
使用分析函数的方法
SELECT id
FROM (SELECT u.id
, u.active_contact
, count(*) OVER () actives
FROM users u
WHERE u.id IN ('1','2','3')
AND u.active = 'Y')
WHERE ( actives = 1
OR ( actives > 1
AND active_contact = 'Y'))
如果有多个记录active = 'Y' AND active_contact = 'Y'
,它将全部返回。如果只需要其中一个,则需要确定选择该标准的标准。