Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用不存在的条件_Sql_Sql Server - Fatal编程技术网

Sql 使用不存在的条件

Sql 使用不存在的条件,sql,sql-server,Sql,Sql Server,我想通过查询从表days中选择未在表Chu inout中找到的日期,但我有此表days: 第二张表:Chu inout“ 我尝试了以下代码: SELECT Date_1 from [dbo].[days] not EXISTS SELECT id_emp,Date_1 FROM ch_inout 预期的结果是: id_emp date_1 2 2019-08-02 2 2019-08-09 2 2019-08-10

我想通过查询从表days中选择未在表Chu inout中找到的日期,但我有此表days:

第二张表:Chu inout“

我尝试了以下代码:

SELECT    Date_1   from  [dbo].[days] not EXISTS   SELECT  id_emp,Date_1  FROM ch_inout
预期的结果是:

id_emp   date_1   
2        2019-08-02  
2        2019-08-09  
2        2019-08-10          
6        2019-08-02  
6        2019-08-04      
6        2019-08-09  
6        2019-08-10

您希望
不存在
和关联子句:

编辑:

您似乎希望所有的日子都不使用给定的
id\u emp

SELECT d.Date_1 
FROM [dbo].[days] d CROSS JOIN
     (SELECT DISTINCT id_emp FROM ch_inout
     ) e
WHERE NOT EXISTS (SELECT 1
                  FROM ch_inout io
                  WHERE io.Date_1 = d.Date_1 AND io.id_emp = e.id_emp
                 );

您可以使用
交叉联接
生成所有组合,然后使用
左联接
放弃现有组合,如所示:

select e.id_emp, d.date_1
from days d
cross join (select distinct id_emp from ch_inout) e
left join ch_inout c on c.id_emp = e.id_emp and c.date_1 = d.date_1
where c.id_emp is null
order by e.id_emp, d.date_1
结果:

id_emp  date_1
------  ----------
2       2019-08-02
2       2019-08-09
2       2019-08-10
6       2019-08-02
6       2019-08-04
6       2019-08-09
6       2019-08-10
请参阅。

您可以在此处使用

您可以尝试以下方法:

cte1(id_emp, date_1) as
(
select distinct(t1.id_emp), t2.date_1
from ch_inout t1
cross join days t2
)
select * from cte1
except
select * from ch_inout

你的代码出了什么问题?预期的结果:不是我想要的结果。我怎么能对相同的结果这样做呢?但结果与上面提到的“预期结果”不一样。你能找到解决方案吗?我们都在猜测你想要什么,因为你的帖子不太清楚。但结果与上面的不一样。”预期结果“正如我提到的,先生,您能找到任何解决方案吗?@programmer_25已修复。但结果与上述结果不同”预期结果“正如我提到的,sir结果也不正确,我希望id_emp和date_1列您编辑的上一个查询与结果不匹配,对,先生,希望我找到了解决方案希望您能找到解决方案先生,请节省我的时间
select e.id_emp, d.date_1
from days d
cross join (select distinct id_emp from ch_inout) e
left join ch_inout c on c.id_emp = e.id_emp and c.date_1 = d.date_1
where c.id_emp is null
order by e.id_emp, d.date_1
id_emp  date_1
------  ----------
2       2019-08-02
2       2019-08-09
2       2019-08-10
6       2019-08-02
6       2019-08-04
6       2019-08-09
6       2019-08-10
SELECT Date_1 from [dbo].[days] 
EXCEPT 
SELECT Date_1 FROM ch_inout
cte1(id_emp, date_1) as
(
select distinct(t1.id_emp), t2.date_1
from ch_inout t1
cross join days t2
)
select * from cte1
except
select * from ch_inout