Jam*_*esG 7 sql t-sql sql-server
我遇到了一个看似基本的查询(在 SQL Server 2017 CU17 上)结果的问题,我希望人们能够提出一些我可能没有检查或尝试得到正确结果的事情。
问题的前提是我试图识别一个表中的行,而另一个表中存在 ID。这通常可以通过 LEFT JOIN 来完成,在这种情况下,查询非常简单,如下所示:
SELECT t1.id,
t2.id
FROM Table1 AS t1
LEFT JOIN Table2 t2 ON t2.id = t1.id
WHERE t2.id IS NULL
Run Code Online (Sandbox Code Playgroud)
此查询应根据“id”列识别 Table1 中存在但 Table2 中不存在的行,并且针对运行查询时未以任何方式操作的静态数据运行。

我从中得到一个奇怪的结果,其中返回 t1.id 的行,但 t2.id 为 NULL - 就好像 t1 中存在行,但 t2 中不存在行。但是,如果我获取从第一个查询返回的 ID 之一,并手动检查它是否存在于两个表中,则看起来该 id 确实存在于两个表中 - 即使我将该 id 放入带有内部联接的查询中,例如如下:
SELECT t1.id,
t2.id
FROM Table1 AS t1
INNER JOIN Table2 t2 ON t2.id = t1.id
WHERE t1.id = 761179370
Run Code Online (Sandbox Code Playgroud)

如果多次运行 LEFT JOIN 查询,每次都会返回不同数量的行。需要注意的是,id 列都是 int 数据类型,并且表具有完全相同的排序规则。
我尝试过的:
任何想法可能是什么问题,或者我可以检查什么来找出为什么我得到这些结果 - 任何指导将不胜感激!
小智 0
不久前我也遇到了类似的问题。原因是 SQL-Server Management Studio 缓存了一些结果。著名的断断续续确实解决了我的问题。你的实验几乎表明情况并非如此,所以..
在这里我建议将结果与以下内容进行比较:
SELECT t1.id FROM Table1 AS t1
where t1.id not in (select id from table2)
Run Code Online (Sandbox Code Playgroud)
如果这些结果与您的查询不匹配,我建议重新启动。
PS:抱歉没有使用该评论,我对此没有足够的声誉。:-\
| 归档时间: |
|
| 查看次数: |
500 次 |
| 最近记录: |