【问题标题】:Searching in SQL server and returning records that match both search criteria but also comparison with other records在 SQL Server 中搜索并返回既符合搜索条件又符合其他记录的记录
【发布时间】:2017-04-03 12:32:15
【问题描述】:

我将尝试以简单的方式向您解释我在标题中的意思。假设我有一个名为 [Persons] 的表,其中的每条记录都是一个人,具有以下列: 姓名HashId。 现在,在我的代码中,我可以使用名称和姓氏作为条件在此表中进行搜索,例如:

SELECT * 
FROM [Persons]
where Name = '..' AND Surname = '..'

这将返回所有符合搜索条件的记录。第三列是一个计算列,取决于姓名和姓氏。因此,如果我搜索一个叫“Alex Foo”的人,并且在数据库中有 2 个同名同姓的人,他们的 HashID 将是相同的。我现在想要的是我的查询不返回这 2 条记录,而只返回一条.. 查询必须能够检查 HashID 是否相同,在这种情况下,只返回 1 条记录满足这一点规则。我怎样才能修改我的 SQL 查询来达到这个目的?提前致谢!

编辑:我省略了您的答案现在清楚的信息。由于以下原因,我必须过滤 HashId:如果有 2 条名为“Alex”和“alex”的记录,根据我的逻辑,它们的 HashId 将是相同的,这是我的目的的正确逻辑(整个代码后面比我给你的解释更复杂)。但是对名称“alex”的简单选择将返回两个不同的记录,分别名称为“Alex”和“alex”。这就是 HashId 很重要的原因。

【问题讨论】:

  • 样本数据会有所帮助,这有点不清楚。如果 name+surname 的 hash 始终相同,为什么在搜索 name+surname 时需要检查 HashID 是否相同
  • SELECT DISTINCT name,Surname,HashId ?您不需要 HashId 列来返回不同的值

标签: mysql sql sql-server


【解决方案1】:

你不能按姓名、姓氏、HashId 分组吗?

像这样:

SELECT name,Surname,HashId 
FROM [Persons]
where Name = '..' AND Surname = '..'
GROUP BY name,Surname,HashId

如果所有列都相同,那么它将为此返回一行

编辑

正如 Panagiotis Kanavos 指出的那样,这也与在列上执行 distinct 相同。也许这更干净。像这样:

SELECT DISTINCT name,Surname,HashId 
FROM [Persons]
where Name = '..' AND Surname = '..'

【讨论】:

  • 这和SELECT DISTINCT一样。
  • @PanagiotisKanavos :这是真的。我更新了答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 2021-02-17
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多