mysql获取缺少的值

mysql获取缺少的值,mysql,insert,left-join,Mysql,Insert,Left Join,我知道这是一个普通的问题,但我需要更多的东西。我在获取未插入到一个表中的值时遇到了一个问题 好的,这是我的桌子: 名称:重要日期;科尔斯:身份证,日期 名称:插页;cols:id、日期、员工id 我的问题:如何为每个员工获取缺失的值?假设我需要id=213的员工缺少的插入 到目前为止,我写了这篇文章,但它还不起作用,就好像一天中有一个工人的insert一样,它消除了所有工人的一天 代码: 现在如何添加员工id检查 谢谢各位,如果你们还需要什么,我随时都可以 编辑: 以下是示例: 雇员: 1.萨姆

我知道这是一个普通的问题,但我需要更多的东西。我在获取未插入到一个表中的值时遇到了一个问题

好的,这是我的桌子:

  • 名称:重要日期;科尔斯:身份证,日期
  • 名称:插页;cols:id、日期、员工id
  • 我的问题:如何为每个员工获取缺失的值?假设我需要id=213的员工缺少的插入

    到目前为止,我写了这篇文章,但它还不起作用,就好像一天中有一个工人的insert一样,它消除了所有工人的一天

    代码:

    现在如何添加员工id检查

    谢谢各位,如果你们还需要什么,我随时都可以

    编辑:
    以下是示例:
    雇员:
    1.萨姆
    2.迈克
    3.乔

    重要日期:
    1.2013-01-01
    2.2013-01-02
    3. ...
    402013-02-23

    插入:
    1.2013-02-01,1
    2.2013-02-01,2
    3.2013-02-01,3
    4.2013-02-02,3
    5.2013-02-03,1
    6.2013-02-03,2
    7.2013-01-12,1


    所以,当我运行查询时,我应该得到所有“缺少”的插入。对于每个员工,我应该在缺少insert时获取员工的日期和ID。大量数据,但重要的是要知道哪些未插入,哪些已插入。

    使用简单的左连接代替左外连接,并正确提供日期

    SELECT
      i.date
    FROM importantDates i
      LEFT JOIN inserts s
        ON i.date = DATE(s.date)
    WHERE i.date BETWEEN '2013-01-01'
        AND '2013-02-23'
        AND s.date IS NULL;
    

    我不太确定我是否理解您试图实现的目标,但如果您想从
    表a
    中获取不在
    表b
    中的每一行,您可以这样做:

    SELECT * FROM table_a 
    WHERE table_a.col NOT IN 
    ( 
        SELECT col FROM table_b
    )
    
    因此(如果我理解正确的话)在您的情况下:

    SELECT i.date FROM importantDates i 
    WHERE i.date NOT IN 
    (
        SELECT date FROM inserts WHERE employe_id = 213
    ) 
    AND i.date BETWEEN '2013-01-01' AND '2013-02-23';
    
    有关-条款中
    的更多文档,请参阅

    更新:

    要获得相应的员工,您可以将声明更改为:

    SELECT i.date, e.* FROM importantDates i 
    JOIN employees e
    WHERE i.date NOT IN 
    (
        SELECT s.date FROM inserts s WHERE s.employe_id = e.employe_id
    ) 
    AND i.date BETWEEN '2013-01-01' AND '2013-02-23';
    

    但是,不建议这样做,因为子查询是到主查询的。

    假设您有一个
    employee
    表,请尝试:

    select sq.* from
    (select e.employe_id, i.date
     FROM importantDates i
     CROSS JOIN employee e
     WHERE i.date BETWEEN '2013-1-1' AND '2013-2-23') sq
    LEFT OUTER JOIN inserts s 
      ON sq.date = DATE(s.date) and sq.employe_id = s.employe_id
    WHERE s.date IS NULL;
    
    如果没有单独的
    employee
    表,可以通过将上述查询中的
    employee
    更改为:

    (select distinct employe_id from inserts) as e
    

    左外连接与左连接相同-外部关键字是可选的。嘿,不,你没有正确理解我。我已经有了这个,我只需要再添加一个条件来搜索每天的每个“Employee_id”。但无论如何,感谢您的回答,这是另一种获取尚未插入的值的方法。啊,我以为您希望通过id获取特定的员工。我更新了我的答案,尽管我不建议使用它。在这种情况下,马克·班尼斯特的答案可能是最好的方法。这就是我一直在寻找的。你能告诉我你是从哪里弄来的还是你自己写的?因为我还没有找到这个例子。哦,我有单独的“雇员”表:)@Matjaz:我自己根据您描述的要求计算出来的。:)好的,我编辑了我的问题。正确的答案已经给出了,但以防我不够清楚。
    (select distinct employe_id from inserts) as e