MySQL:从表中查找缺失值

时间:2012-11-30 13:09:31

标签: mysql

我有两个不同的表:

  1. checkin_out 包含两个字段: emp_code checked_date
  2. temp_days 包含两个字段: id date_value
  3. checkin_out 包含以下数据:

    emp_code | checked_date
    -----------------------
    001        2012-11-01
    001        2012-11-02
    001        2012-11-03
    002        2012-11-01
    003        2012-11-01
    003        2012-11-02
    

    temp_days 包含以下数据:

    id  | date_value
    -----------------
    1     2012-11-01
    2     2012-11-02
    3     2012-11-03
    4     2012-11-04
    5     2012-11-05
    

    从上表中,我需要在表格 temp_days 中显示缺少的日期;我需要查询以获得如下结果:

    emp_code  |  date_value
    -----------------------
    001          2012-11-04
    001          2012-11-05
    002          2012-11-02
    002          2012-11-03
    002          2012-11-04
    002          2012-11-05
    003          2012-11-03
    003          2012-11-04
    003          2012-11-05
    

    如果有人可以提供帮助,请!谢谢!

2 个答案:

答案 0 :(得分:1)

以下内容适用于具有多个emp_codes的更复杂的数据集。

SELECT  alldays.emp_code, alldays.date_value
FROM    (
          SELECT date_value, emp_code
          FROM temp_days
          CROSS JOIN checkin_out
          GROUP BY date_value, emp_code
        ) alldays
        LEFT JOIN checkin_out C
            ON alldays.date_value = C.checked_date
            AND alldays.emp_code = C.emp_code
WHERE   C.emp_code IS NULL

答案 1 :(得分:0)

SELECT  c.emp_code, a.date_value
FROM    temp_days a
        LEFT JOIN checkin_out b
            ON a.date_value = b.checked_date
        CROSS JOIN 
        (
            SELECT emp_code
            FROM checkin_out
            GROUP BY emp_code
        ) c
WHERE   b.emp_code IS NULL