【问题标题】:SQL - Select records only with inactive statusSQL - 仅选择处于非活动状态的记录
【发布时间】:2011-08-19 15:09:31
【问题描述】:

我有以下要求。

**---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,因此它们不应出现在结果中。

感谢任何帮助。

谢谢!

【问题讨论】:

  • 家庭作业?到目前为止你写了什么?
  • 我不是 SQL 专家。这就是寻求帮助的原因。
  • +1 用于提供来自两个表的输入数据样本并描述所需的输出。 -1 表示不费心提供列名或您迄今为止尝试过的对您不起作用的内容。总而言之,你收支平衡。也许下一个问题你会提供一切并获得实际的 + 投票。 :)
  • 谢谢肯。下次会照顾。顺便说一句...@SQLMenace = 狂躁

标签: sql oracle ansi-sql netezza


【解决方案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)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      SELECT a.CustID
      FROM TableA a
        INNER JOIN TableB b ON a.S = b.S
      GROUP BY a.CustID
      HAVING SUM(b.S) = 0
      

      【讨论】:

        猜你喜欢
        • 2014-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多