SQL - 仅选择具有非活动状态的记录

时间:2011-05-05 18:20:41

标签: sql oracle ansi-sql netezza

我有以下要求。

**---Table A---**
CustID_1   S1    
CustID_1   S2    
CustID_2   S2    
CustID_2   S3    
CustID_3   S4 
CustID_3   S5


**---Table B---**
S1     1
S2     0
S3     1
S4     0
S5     0

我想选择所有B.S = 0的所有CustID。 因此,在上述情况下,只应选择CustID_3。 CustID_1,CustID_2至少具有S = 1,因此它们不应出现在结果中。

感谢任何帮助。

谢谢!

3 个答案:

答案 0 :(得分:1)

未测试:

SELECT custid
  FROM A a1 
 WHERE NOT EXISTS
       (SELECT custid
          FROM A a2 JOIN B ON (a2.col2 = B.col1)
         WHERE B.col2 = 1
           AND a2.custid = a1.custid)

答案 1 :(得分:1)

试试这个;它返回B 中不存在的所有custID,其中B.S'的值等于0:

SELECT
    A.custID
FROM
    A
WHERE
    A.custID NOT IN
    (
        SELECT
            B.custID
        WHERE
            B.S <> 0
    )

答案 2 :(得分:1)

SELECT a.CustID
FROM TableA a
  INNER JOIN TableB b ON a.S = b.S
GROUP BY a.CustID
HAVING SUM(b.S) = 0