基于count()为非零的SQL查询中的选择值

时间:2018-03-21 22:11:13

标签: sql join subquery

我正在尝试编写一个SQL查询,以便"计算"基于JOIN状态表的行的状态列。

我的记录基本上是:id | name | statusId,它是状态表的外键。该表格包含:id | statusName

我为每个count() statusId收集DISTINCT。现在,我需要根据以下想法返回任意状态ID:if count(status0) > 0,我需要返回status0,否则我需要检查status1然后status2等。< / p>

我是否可以使用{/ 1}},JOINWHERE等编写SQL查询以返回每个行状态的状态,而不使用if / else逻辑?

3 个答案:

答案 0 :(得分:0)

如果您需要使用的状态,请使用exists

select s.*
from statuses s
where exists (select 1 from records r where r.statusid = s.id);

实际上,如果您只想要ID,可以使用:

select distinct r.statusid
from records;

答案 1 :(得分:0)

重新提出问题,您是否想获得更大表中存在的状态?怎么样?

SELECT s.*
  FROM status s
 WHERE s.id IN (SELECT DISTINCT statusid FROM records);

答案 2 :(得分:0)

从这开始它应该让你走上正确的轨道......

select a.*, b.*, c.cnt from table1 a
join table2 b on a.statusid=b.id
join (
select statusname, count(*) cnt
from table1 a join table2 b on a.statusid=b.id
group by statusname)c
on b.statusname=c.statusname