Oracle 10g选择满足特定条件的记录

时间:2012-09-18 17:47:43

标签: sql oracle select

我很感激以下查询提供了一些帮助..我有一张表格如下,

UID | Status | Msg_Id | Msg_Id_type
1   | START  | AA     | GLOBAL
2   | END    | AA     | GLOBAL
3   | PROC   | AA     | GLOBAL
4   | START  | BB     | GLOBAL
5   | START  | CC     | GLOBAL
6   | START  | DD     | GLOBAL
7   | END    | DD     | GLOBAL

我想要实现的是仅选择那些记录,对于给定的MSG_ID没有除“START”之外的任何其他状态,或者除了“START”之外没有任何其他状态的所有记录。非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

这个怎么样:

SELECT *
FROM my_table a
WHERE NOT EXISTS (
        SELECT 1
        FROM my_table b
        WHERE b.status <> 'START'
            AND b.msg_id = a.msg_id
    )
    AND a.status = 'START' -- < I think you can ignore this line.

答案 1 :(得分:0)

这可以帮到你:

SELECT msg_id  
  FROM TABLE  
 GROUP by msg_id  
HAVING COUNT(CASE WHEN STATUS = 'START' THEN 1 ELSE NULL END) = 1  
   AND COUNT(CASE WHEN STATUS <> 'START' THEN 1 ELSE NULL END) = 0  

`