【问题标题】:SQL query: How to select record from other table where no record exist or count = 0 (conditional)SQL查询:如何从不存在记录或计数= 0(条件)的其他表中选择记录
【发布时间】:2013-07-25 15:27:00
【问题描述】:

我有两张桌子:

表 1:StaffDB

SID | Name
1   | Peter
2   | Mary
3   | John

表 2:工作经历(员工将有超过 1 条记录)

HistID | SID | PositionID | isCurrent | StartDate  | EndDate  
1      | 1   | 123        | 0         | dd-mm-yyyy | dd-mm-yyyy  
2      | 1   | 221        | 1         | dd-mm-yyyy |  
3      | 2   | 434        | 0         | dd-mm-yyyy | dd-mm-yyyy

例如,在表 2 中。

Peter (SID=1) had 2 records, 2nd record is current record (isCurrent=1)  

Mary (SID=2) had 1 non current record  

John (SID=3) don't have any record

我如何编写一个 sql 查询来选择没有任何工作经历或没有任何当前记录的员工 (isCurrent=1)

对于上面的例子,应该返回 Mary 和 John。

谢谢

【问题讨论】:

    标签: sql sql-server select


    【解决方案1】:

    使用 LEFT JOIN 并检查连接表上的 NULL 主键:

    SELECT StaffDB.*
    FROM StaffDB
    LEFT JOIN EmploymentHistory ON StaffDB.SID = EmploymentHistory.SID
      AND EmploymentHistory.isCurrent = 1
    WHERE EmploymentHistory.HistID IS NULL
    

    或者使用 EXISTS - 这可能会更高效,虽然不那么容易阅读(主观):

    SELECT *
    FROM StaffDB
    WHERE NOT EXISTS (SELECT 1 FROM EmploymentHistory 
                      WHERE EmploymentHistory.SID = StaffDB.SID
                      AND EmploymentHistory.isCurrent = 1)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多