gpt4 book ai didi

sql - TSQL - LEFT JOIN 奇怪的结果

转载 作者:行者123 更新时间:2023-12-03 20:54:57 24 4
gpt4 key购买 nike

我遇到了一个看似基本的查询结果的问题(在 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

此查询应根据“id”列识别存在于 Table1 中但不存在于 Table2 中的行,并针对在我运行查询时未以任何方式操作的静态数据运行。

LEFT JOIN query results image

我得到了一个奇怪的结果,在返回 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

INNER JOIN query results for a given ID image

如果我多次运行 LEFT JOIN 查询,每次返回的行数都会不同。
重要的是要注意 id 列都是 int 数据类型,并且表具有完全相同的排序规则。

我尝试过的:
  • 我已经重建了每个表的所有列和索引的统计信息,以查看是否导致了一些问题。
  • 我已将数据库恢复到另一台服务器上并运行相同的数据库,但没有遇到我在上面看到的问题。数据库位于可用性组中,我也在可读辅助上运行了相同的查询,但没有看到相同的行为。
  • 我运行 LEFT JOIN 查询的服务器已打开,总体上是一个繁忙的服务器 - 这可能是查询未返回正确结果的一个因素吗?
  • 我试过打开和关闭 ANSI_NULLS,没有区别。

  • 知道问题可能是什么,或者我可以检查什么来弄清楚为什么我会得到这些结果 - 任何指导将不胜感激!

    最佳答案

    不久前我遇到了类似的问题。原因是 SQL-Server Management Studio 缓存了一些结果。著名的断断续续确实解决了我的问题。你的实验几乎表明情况并非如此,所以..
    在这里,我建议将结果与以下内容进行比较:

    SELECT  t1.id FROM Table1 AS t1
    where t1.id not in (select id from table2)
    如果这些结果与您的查询不匹配,我建议重新启动。
    PS:抱歉没有使用评论,我没有足够的声誉。 :-\

    关于sql - TSQL - LEFT JOIN 奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61248201/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com