Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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
Asp.net 当只有一个对应的行丢失或某些字段值丢失时,如何从两个几乎相同的表中获取行_Asp.net_Sql Server - Fatal编程技术网

Asp.net 当只有一个对应的行丢失或某些字段值丢失时,如何从两个几乎相同的表中获取行

Asp.net 当只有一个对应的行丢失或某些字段值丢失时,如何从两个几乎相同的表中获取行,asp.net,sql-server,Asp.net,Sql Server,我有两个sql server表,分别是Actual_Schedule和Employee_Updated_Schedule。两者都有相同的列,如ID、ClockInDate、ClockInTime、ClockOutDate、ClockOutTime、EmployeeName和JobName。实际的_计划有一行对应于经理创建的分配计划。员工必须每天使用网站打卡和下班。在一天结束时,经理将在asp.net网格视图中显示数据以比较行 通常,两个表中的行应该相同。然而,有些员工可能会打卡,但忘记打卡。在这

我有两个sql server表,分别是Actual_Schedule和Employee_Updated_Schedule。两者都有相同的列,如ID、ClockInDate、ClockInTime、ClockOutDate、ClockOutTime、EmployeeName和JobName。实际的_计划有一行对应于经理创建的分配计划。员工必须每天使用网站打卡和下班。在一天结束时,经理将在asp.net网格视图中显示数据以比较行

通常,两个表中的行应该相同。然而,有些员工可能会打卡,但忘记打卡。在这种情况下,ClockOutDate和ClockOutTime将从Employee_Updated_Schedule表中丢失。有时员工可能会忘记打卡,在这种情况下,整行将丢失。在这两种情况下,经理都将使用网格进行填充。我必须编写一个sql来从两个表中获取行,只有当任何字段丢失或整行丢失并显示在网格中时。我考虑使用UNION编写一个查询,从这两个表中获取数据。但我不知道如何限制只在一个表中缺少行或一个表中缺少某些字段时检索行


谢谢

假设它们在ID上联接,如果它们不在相关列上联接,则可以在列不同或缺少的ID为空的情况下使用完整的外部联接。这里有一个例子

declare @Actual_Schedule table (
ID int
,ClockInDate date
,ClockInTime time
,ClockOutDate date
,ClockOutTime time
)

declare @Employee_Updated_Schedule table (
ID int
,ClockInDate date
,ClockInTime time
,ClockOutDate date
,ClockOutTime time
)

insert @Actual_Schedule (ID, ClockInDate, ClockInTime, ClockOutDate, ClockOutTime)
values (1, '2017-01-03', '06:00:00', '2017-01-03', '15:00:00')
,(2, '2017-01-04', '06:00:00', '2017-01-03', '15:00:00')
,(3, '2017-01-05', '06:00:00', '2017-01-03', '15:00:00')
,(4, '2017-01-06', '06:00:00', '2017-01-03', '15:00:00')
,(5, '2017-01-07', '06:00:00', '2017-01-03', '15:00:00')

insert @Employee_Updated_Schedule (ID, ClockInDate, ClockInTime, ClockOutDate, ClockOutTime)
values (1, '2017-01-03', '06:05:00', '2017-01-03', '15:00:00')
,(2, '2017-01-04', '06:00:00', '2017-01-03', '15:00:00')
,(4, '2017-01-06', '06:00:00', '2017-01-03', '15:00:00')
,(5, '2017-01-07', '06:00:00', '2017-01-03', '14:57:00') 

select *
from @Actual_Schedule a
full outer join @Employee_Updated_Schedule b on
    a.ID = b.ID
where
    a.ClockInDate <> b.ClockInDate
    or a.ClockInTime <> b.ClockInTime
    or a.ClockOutDate <> b.ClockOutDate
    or a.ClockOutTime <> b.ClockOutTime
    or b.id is null

我觉得这比我之前说的要好。