在一个表中查找记录,这些记录在特定日期的其他给定日期中不存在

时间:2018-01-05 14:40:08

标签: sql

所以我有两张桌子。

  1. 员工 - 主要表
  2. emp_attend - 子表
  3. emp_id - 是员工表的主要关键词emp_attend的外键
  4. 我想选择员工中存在但在emp_attend中不存在的所有数据。我可以使用此查询执行此操作:

    String selectQuery = "SELECT \n" +
                                 "employees.emp_id, employees.first_name, employees.last_name \n" +
                                 "FROM employees \n" +
                                 "LEFT JOIN emp_attend ON emp_attend.emp_id = employees.emp_id \n" +
                                 "WHERE emp_attend.emp_id IS NULL";
    

    现在,如何在emp_attend表中给出特定日期的情况下,它只选择employee表中不存在的数据

    String selectQuery = "SELECT \n" +
                                 "employees.emp_id, employees.first_name, employees.last_name \n" +
                                 "FROM employees \n" +
                                 "LEFT JOIN emp_attend ON emp_attend.emp_id = employees.emp_id \n" +
                                 "WHERE emp_attend.emp_id IS NULL OR emp_attend.date != ?";
    

    我尝试了上述查询,但它显示了所有员工。

    例如 对于1/5/2018,它显示了尚未在emp_attend表中列出的所有员工。

    希望你能帮助我。

2 个答案:

答案 0 :(得分:1)

您需要在emp_attend.date而不是LEFT JOIN子句中移动WHERE cocndition。

SELECT
    employees.emp_id
    , employees.first_name
    , employees.last_name
FROM employees
    LEFT JOIN emp_attend 
        ON emp_attend.emp_id = employees.emp_id 
             AND emp_attend.date = ?
WHERE emp_attend.emp_id IS NULL;

答案 1 :(得分:0)

select * from employees emp
outer join emp_attend attend
on emp.emp_id = attend.emp_id