SQL需要帮助构建查询

时间:2016-08-18 14:55:53

标签: sql

我需要您帮助构建查询。

我有两张桌子:

第一个表(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 

查询未返回预期结果。你能帮我吗?

2 个答案:

答案 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