【问题标题】:SQL Where Clause Returning Multiple ResultsSQL Where 子句返回多个结果
【发布时间】:2011-08-31 02:00:02
【问题描述】:

我在 WHERE 子句中有一个包含多个条件的 SQL 语句,但是一旦满足一个条件,查询就会停止。我需要的是查询返回与条件之一有关的所有行。

例如:

select * from EMPLOYEE_LEAVE
where
   ENUMBER = :num
   or
   EFNAME = 'Sebastien'
   or 
   ESNAME = :sname 

在这种情况下,查询必须搜索 EFNAME 为 Sebastien 的所有记录。我的数据库中有两条符合此条件的记录,但是查询只返回第一个结果。我将如何显示所有符合此条件的记录?

【问题讨论】:

  • 您使用的是什么关系型数据库?搜索是否区分大小写?
  • Sql 将返回包含所有匹配行的集合,因此肯定有其他问题。您使用的是哪个 dbms/服务器,您如何评估结果?
  • 如果该行匹配多个条件,您是否期望多次返回同一行?如果是这样,UNION ALL 可能就是您所需要的(尽管我不明白为什么这是可取的)
  • @Oded 和@faester - 我正在使用 Firebird 2.1 和 Database Workbench 4 Lite for Firebird。问题可能出在 Database Workbench 上,因为我所做的只是编写语句并执行它吗? @John-Pickup 不,两个不同的行。我的数据库中有 Sebastien Smith 和 Sebastien Russell,当使用上述查询搜索 Sebastien 时,我希望返回两行,但只返回 Sebastien Russell。
  • SELECT * FROM EMPLOYEE_LEAVE where EFNAME='Sebastien' 是否返回两行?

标签: sql firebird where-clause firebird2.1


【解决方案1】:

SQL 将返回所有符合您条件的行。如果你只得到第一行,那么这不是 SQL 问题,而是你的前端编程问题。提供您的代码示例,我们可以回答您的错误。

【讨论】:

  • 嗨@TomTom - 感谢您的回复。我的问题中的 SQL sn-p 是我在 Database Workbench 4 Lite for Firebird 中使用的语句,我还没有实现任何前端开发。
【解决方案2】:

也许 Sebastien Smith 的名字中有一个特殊字符,在您使用的工具中不会立即显示。 (例如塞巴斯蒂安)

【讨论】:

    【解决方案3】:

    好的,我发现了问题。

    当对数据库进行更改时,Database Workbench 不会更新 SQL 编辑器窗口。我不得不关闭 SQL 编辑器并重新打开它以便编辑器查看更改,我从 @N-West 和 @Tim 的 cmets 中注意到了这一点(顺便说一句,两个查询都只返回一行)。

    感谢您的所有回复:)

    【讨论】:

      猜你喜欢
      • 2023-03-26
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2020-06-23
      相关资源
      最近更新 更多