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