SQL Select语句问题 - 在第二个表上有条件地返回行

时间:2011-08-05 22:53:57

标签: sql

我真的可以使用以下SQL Select语句场景的一些帮助:

我需要有条件地从表中选择所有行,具体取决于userID是否已将数据输入到具有相同ID的第二个表中。

示例:

  1. 从表A中选择idNumber的所有行,其中idNumber不在 表B
  2. 但是对于表B中的每个idNumber,仍然返回行,除非a 特定用户ID位于表B中的该行。

  3. TABLE A
    ========
    idNumber|type|Date
    
       1      A    01/01/01
    
       2      A    01/01/01
    
       3      B    01/01/01
    
       4      B    01/01/01
    
       5      B    01/01/01
    
    TABLE B
    ========
    idNumber|type|userID
       1      A    0000
    
       3      B    0000
    
       4      B    1111
    

    用于排除= 1111

    的记录的userID

    SQL Query应该返回:

    idNumber|type|Date
    
       1      A    01/01/01
    
       2      A    01/01/01
    
       3      B    01/01/01
    
       5      B    01/01/01
    

    为长篇大论的帖子道歉,但我希望这是有道理的。

    非常感谢, ukjezza。!!

3 个答案:

答案 0 :(得分:3)

看起来LEFT JOINCOALESCE可以照顾它:

SELECT a.* 
FROM TableA as a
LEFT JOIN TableB as b
ON a.idNumber = b.idNumber
WHERE COALESCE(b.userID, -1) != 1111

答案 1 :(得分:3)

Select idNumber, type, Date
From TableA
Where Not Exists    (
                    Select 1
                    From TableB
                    Where TableB.idNumber = TableA.idNumber
                        And TableB.userID = 1111
                    )

另一种选择:

Select TableA.idNumber, TableA.type, TableA.Date
From TableA
    Left Join TableB
        On TableB.idNumber = TableA.idNumber
            And TableB.userId = 1111
Where TableB.idNumber Is Null

答案 2 :(得分:1)

select A.*
from TableA as A
  left outer join TableB as B
    on A.idNumber = B.idNumber
where B.idNumber is null or
      B.userID <> '1111'