当前位置: 首页 > 面试题库 >

SQL中的相关子查询

微生旻
2023-03-14
问题内容

我有两个表:表A和表B

  1. 表A和表B都有RowId列。
  2. 表A和表B都有ModifiedAt列。
  3. 表A的一列也称为Key

检查条件:

  1. 如果表A“键” =恒定,则从表A检索RowId。
  2. 从中获取这些行ID,Table A并检查ModifiedAt这些行的字段是否>具有相同rowId的表B的> ModifiedAT字段。

TableB没有重复的RowId,而TableA具有。

我自己尝试的方法:

select *
from dbo.ResultsStored rs
WHERE HashedKey = hashbytes('MD5', @StringConcat) 
                       and 
                       rs.ModifiedAT > (select Max(ModifiedAt)
    from dbo.Patients P
    where P.RowId = rs.RowId)

注意:另外,令我感到惊讶的是,如果我将rs.RowId硬编码值替换为“ 1”,它会起作用,但并非如此。

当我对rs.RowId进行硬编码时的结果:

if not exists (select * from dbo.ResultsStored RS where RS.HashedKey =  0xBBE4D4DC92C713756E6683ADD671F7DA and ModifiedAt > (select ModifiedAt from dbo.Patients where RowId = 1))
begin
print'not exists'
end
else
begin
print 'exists'
end

输出 :不存在

if not exists (select * from dbo.ResultsStored RS where RS.HashedKey =  0xBBE4D4DC92C713756E6683ADD671F7DA and ModifiedAt > (select ModifiedAt from dbo.Patients where RowId = rs.RowId))
begin
print'not exists'
end
else
begin
print 'exists'
end

OUTPUT :存在

预期输出 :不存在

我可以在这方面寻求帮助吗?


问题答案:

问题出在您的数据中。如果我理解正确,那么您想知道结果中是否有这样的行,哪个日期比患者日期大。如果没有找到这样的行,那就可以了。

如果是这样,您的查询看起来正确。您可以通过以下方式直接选择不正确的数据:

SELECT  *
FROM    Patients p
        CROSS APPLY ( SELECT    MAX(ModifiedAt) AS ModifiedAt
                      FROM      ResultsStored rs
                      WHERE     p.RowId = rs.RowId
                    ) a
WHERE   a.ModifiedAt > p.ModifiedAt


 类似资料:
  • 本文向大家介绍SQL语句中‘相关子查询’与‘非相关子查询’有什么区别?相关面试题,主要包含被问及SQL语句中‘相关子查询’与‘非相关子查询’有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 (1)非相关子查询是独立于外部查询的子查询,子查询总共执行一次,执行完毕后将值传递给外部查询。 (2)相关子查询的执行依赖于外部查询的数据,外部查询执行一行,子查询就执行一次。 因此非相关子查询比相关子查

  • 问题内容: 我有一个查询,当前正在使用相关子查询来返回结果,但是我认为可以使用ROW_NUMBER()更雄辩地解决问题。 问题围绕着值v的分布,通过项的年数。每个项目都有多个版本,每个版本都有自己的配置文件,在引入版本时即会启动,当前数据如下所示: 我想使用适用的最新版本返回商品的完整资料。对于项目1的上述示例: 我目前正在使用 尽管这会返回正确的值,但我怀疑有一种更有效的方法来执行此操作,尤其是

  • 问题内容: 即使它有性能问题,我是否也可以知道相关子查询的用途? 问题答案: 好吧,首先它没有性能问题。就是这样,鉴于硬件和数据库结构的性能限制,它将尽可能地执行。 至于它的作用,它只是表达特定逻辑条件的一种方式。

  • 本文向大家介绍SQL中的子查询,包括了SQL中的子查询的使用技巧和注意事项,需要的朋友参考一下 子查询是查询内的查询,即嵌套查询。它放置在查询中,其结果用于进一步评估外部查询。 在SQL中,子查询必须遵循一些规则。其中一些是- 子查询应放在括号内。 子查询可以与不同的运算符(如<,>,<=,> =,IN,BETWEEN等)一起使用。还可以使用SELECT,INSERT,DELETE,UPDATE等

  • 问题内容: 我很好奇为何应该比更快地执行。 当比尔·卡尔文提出一个要点时,我正在回答一个问题。当您使用它时,它使用相关子查询(依赖子查询),而IN()仅使用子查询。 解释显示,并且两者都使用了一个依赖子查询,并且都只使用了一个子查询..所以我很好奇关联子查询如何比子查询更快? 我以前使用过EXISTS,它的执行速度比IN快,这就是我感到困惑的原因。 这是带有说明的SQLFIDDLE 一些问题 在上

  • 问题内容: 这两个查询都给出相同的输出,这在性能上明智的联接或带有existing子句的相关子查询中比较好,哪个更好。 编辑:-是否有供联接使用的alternet方式,以提高性能:-在上述2个查询中,我需要来自部门以及联系信息表的信息 问题答案: 通常,使用EXISTS子句是因为您可能需要DISTINCT进行JOIN才能提供预期的输出。例如,如果一行有多个Department行ContactInf