Sql server 返回查询值的SQL不存在
我在查询检查两个具有不同行的相同表之间的差异时遇到了一些问题。 这就是问题所在Sql server 返回查询值的SQL不存在,sql-server,tsql,Sql Server,Tsql,我在查询检查两个具有不同行的相同表之间的差异时遇到了一些问题。 这就是问题所在 SELECT * FROM [PROD01].[myDefDB].[forward].[fv] as DB01 WHERE TargetDate = '20150429' and NOT EXISTS (SELECT * FROM [PROD02].[myDefDB].[forward].[fv] as DB02 WHERE DB02.TargetDate = '20150429' and
SELECT *
FROM [PROD01].[myDefDB].[forward].[fv] as DB01
WHERE TargetDate = '20150429' and
NOT EXISTS (SELECT *
FROM [PROD02].[myDefDB].[forward].[fv] as DB02
WHERE DB02.TargetDate = '20150429' and
DB02.Id_Fw = DB01.Id_Fw and
DB02.Id_Bl = DB01.Id_Bl and
DB02.Id_Pt = DB01.Id_Pt and
DB02.TargetDate = DB01.TargetDate and
DB02.StartDate = DB01.EndDate and
DB02.EndDate = DB01.EndDate and
DB02.[Version] = DB01.[Version]
)
假设[PROD02].[myDefDB].[forward].[fv]
是[PROD01].[myDefDB].[forward].[fv].[code>的一个子集,对TargetDate='20150429'
的两个表执行选择计数(*)
会返回2367和4103,因此我希望从该查询中得到1736,但我得到的数据超过2000
我考虑了WHERE
子句中的所有PK。我缺少什么?你可以使用,除了这样的
SELECT Id_Fw,Id_Bland,Id_Pt,TargetDate,StartDate,EndDate,[Version]
FROM [PROD01].[myDefDB].[forward].[fv] as DB01
WHERE TargetDate = '20150429'
EXCEPT
SELECT Id_Fw,Id_Bl,Id_Pt,TargetDate,StartDate,EndDate,[Version]
FROM [PROD02].[myDefDB].[forward].[fv] as DB02
WHERE TargetDate = '20150429'
这将获得PROD01
中不在PROD02
中的所有行,您可以使用,除了这样的
SELECT Id_Fw,Id_Bland,Id_Pt,TargetDate,StartDate,EndDate,[Version]
FROM [PROD01].[myDefDB].[forward].[fv] as DB01
WHERE TargetDate = '20150429'
EXCEPT
SELECT Id_Fw,Id_Bl,Id_Pt,TargetDate,StartDate,EndDate,[Version]
FROM [PROD02].[myDefDB].[forward].[fv] as DB02
WHERE TargetDate = '20150429'
这将获得PROD01
中不在PROD02
中的所有行,您可以使用,除了这样的
SELECT Id_Fw,Id_Bland,Id_Pt,TargetDate,StartDate,EndDate,[Version]
FROM [PROD01].[myDefDB].[forward].[fv] as DB01
WHERE TargetDate = '20150429'
EXCEPT
SELECT Id_Fw,Id_Bl,Id_Pt,TargetDate,StartDate,EndDate,[Version]
FROM [PROD02].[myDefDB].[forward].[fv] as DB02
WHERE TargetDate = '20150429'
这将获得PROD01
中不在PROD02
中的所有行,您可以使用,除了这样的
SELECT Id_Fw,Id_Bland,Id_Pt,TargetDate,StartDate,EndDate,[Version]
FROM [PROD01].[myDefDB].[forward].[fv] as DB01
WHERE TargetDate = '20150429'
EXCEPT
SELECT Id_Fw,Id_Bl,Id_Pt,TargetDate,StartDate,EndDate,[Version]
FROM [PROD02].[myDefDB].[forward].[fv] as DB02
WHERE TargetDate = '20150429'
这将获取PROD01
中不在PROD02
中的所有行。您的列中是否有空值?您的列中是否有空值?您的列中是否有空值?您的列中是否有空值?您可能需要更正第一部分中的列名Id_Blandyeah谢谢,这看起来也是OP的一个输入错误,因为两个表在不同的时刻看起来是同一个表。这段代码很有效,谢谢!但是我上面发布的代码有什么问题?我还有一些表,其中非索引列中的数值略有不同,因此我不能使用,除非使用,好吧,刚刚找到原因DB02.StartDate=DB01.EndDate
而不是DB02.StartDate=DB01.StartDate
您可能需要更正第一部分Id中的列名。\u bland是的,谢谢,这看起来也是OP的输入错误,因为两个表在不同的实例中看起来是同一个表。谢谢!但是我上面发布的代码有什么问题?我还有一些表,其中非索引列中的数值略有不同,因此我不能使用,除非使用,好吧,刚刚找到原因DB02.StartDate=DB01.EndDate
而不是DB02.StartDate=DB01.StartDate
您可能需要更正第一部分Id中的列名。\u bland是的,谢谢,这看起来也是OP的输入错误,因为两个表在不同的实例中看起来是同一个表。谢谢!但是我上面发布的代码有什么问题?我还有一些表,其中非索引列中的数值略有不同,因此我不能使用,除非使用,好吧,刚刚找到原因DB02.StartDate=DB01.EndDate
而不是DB02.StartDate=DB01.StartDate
您可能需要更正第一部分Id中的列名。\u bland是的,谢谢,这看起来也是OP的输入错误,因为两个表在不同的实例中看起来是同一个表。谢谢!但是我上面发布的代码有什么问题?我还有一些表,其中非索引列中的数值略有不同,因此我不能使用,除非使用,好吧,刚刚找到原因DB02.StartDate=DB01.EndDate
而不是DB02.StartDate=DB01.StartDate