我需要您帮助构建查询。
我有两张桌子:
第一个表(table1)给出了历史状态,我的产品通过的所有状态,第二个表(table2)告诉我此时产品的状态。
两个表的id列与status列相同。
我想构建一个查询,告诉我在我的表2中我的产品的状态为D,E和F,但在我的表1中没有通过状态C,就像去状态B到状态D,E或F而不传递给C.
我尝试运行此查询:
select count(id), status
from table1 e
where status not in (C) EXISTS (SELECT *
FROM table2 c
WHERE e.id = c.id
AND status IN (D,E,F))
group by status
查询未返回预期结果。你能帮我吗?
答案 0 :(得分:1)
正如其他响应者所说,您有一些语法错误。基本上,你只是缺少几句话。
select count(id)
, status
from table1 t1
where status not in ('C')
*and*
EXISTS (
SELECT *
FROM table2 t2
WHERE t2.id = t1.id
and status in ('D','E','F')
)
group by status
;
或者,您可以尝试以这种方式解决它。完全披露 - 这可能效率不高(见In vs Exists)。
select count(id)
, status
from table1
where id not in
(
select id
from table1
where status not in ('C')
union
select id
from table2
where status in ('D','E','F')
)
group by status
;
答案 1 :(得分:0)
select count(id), status
from table1 a, table2 b
where a.id = b.id
and a.status not in ('C')
group by a.status