我正在尝试编写一个SQL查询,以便"计算"基于JOIN
状态表的行的状态列。
我的记录基本上是:id | name | statusId
,它是状态表的外键。该表格包含:id | statusName
我为每个count()
statusId收集DISTINCT
。现在,我需要根据以下想法返回任意状态ID:if count(status0) > 0
,我需要返回status0
,否则我需要检查status1
然后status2
等。< / p>
我是否可以使用{/ 1}},JOIN
,WHERE
等编写SQL查询以返回每个行状态的状态,而不使用if / else逻辑?
答案 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