0

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

好的,这是我的表:

  1. 名称:重要日期;列:id,日期
  2. 名称:插入;cols:id,日期,employee_id

我的问题:如何获取每个员工的缺失值?假设我需要 id=213 的员工缺少插入?

到目前为止,我写了这个,但它还没有工作,好像一天中有一个工人的插入,它消除了所有工人的一天。

代码:

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

现在如何添加对employee_id 的检查?

谢谢大家,如果你还需要什么,我随时都可以。

编辑:
这是示例:
员工:
1. sam
2. mike
3. joe

importantDate:
1. 2013-01-01
2. 2013-01-02
3. ...
40. 2013-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

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

4

3 回答 3

0

而不是 LEFT OUTER JOIN 使用简单的 LEFT JOIN 并正确提供日期

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;
于 2013-02-23T11:22:21.867 回答
0

我不太确定我是否理解您想要实现的目标,但是如果您想获取table_a不在其中的每一行,table_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';

有关IN-clause 的更多文档,请参阅mysql 文档

更新:

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

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';

但是,这是推荐的,因为子查询与主查询相关

于 2013-02-23T11:30:58.677 回答
0

假设您有一张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
于 2013-02-23T11:31:00.830 回答