【发布时间】:2014-02-28 16:46:32
【问题描述】:
这是迄今为止我在 SQL Server 中遇到的最奇怪的事情:
数据库 1: 表A ID,字段XYZ
表B ID,字段XYZ
DB2: 表A ID,字段XYZ
表B ID,字段XYZ
Query 1 in DB1:
Select *, 'Unmapped' as Flag
FROM TableA
Where NOT EXISTS (Select * FROM TableB B JOIN TableA A ON ISNULL(B.XYZ,'')=ISNULL(A.XYZ,''))
Result:
Id , XYZ , Flag
23 unmapped ---- Field XYZ here is blank, not NULL, just blank
Query 1 in DB2:
Select *, 'Unmapped' as Flag
FROM TableA
Where NOT EXISTS (Select * FROM TableB B JOIN Table A ON ISNULL(B.XYZ,'')=ISNULL(A.XYZ,''))
Result:
Id , XYZ , Flag --- I don't get any results in the DB2 for the same data as DB1
如果我在 DB1 中修改我的查询如下,那么我不会得到任何“未映射”的东西:
Query 2 in DB1:
Select *, 'Unmapped' as Flag
FROM TableA
Where NOT EXISTS (Select * FROM TableB B JOIN TableA A ON ISNULL(B.XYZ,'')=ISNULL(A.XYZ,'') OR A.XYZ = ' ') -- there is a space here in A.XYZ = ' '
如果在两个数据库中运行以下查询,我会从每个数据库中获取一条记录:
SELECT * FROM DB1.dbo.TableA where FieldXYZ = ' ' -- space within quotes
SELECT * FROM DB2.dbo.TableA where FieldXYZ = ' ' -- space within quotes
那么 db1 中的查询 1 发生了什么?
【问题讨论】:
-
JOIN ON在语法上不正确,所以我很难相信这些查询中的任何一个都会产生任何结果。 -
是否有不同的字段 "FieldXYZ" 和 "XYZ" ?您在示例查询中都提到了这两个。
-
它们是一样的,我为错字道歉。我在这里寻找的更多是对我的问题的概念性答案,而不是实际代码。
-
您的
WHERE NOT EXISTS中的子查询不应该引用主查询中的TableA吗?由于您要加入一个新的TableA变量,我希望您的结果具有误导性。 -
您能否在两个数据库上运行 NOT EXISTS 查询“Select * FROM TableB B JOIN TableA A ON ISNULL(B.XYZ,'')=ISNULL(A.XYZ,'')”并检查如果你得到相同的结果?
标签: sql sql-server sql-server-2008