Sql - WHERE 条件的显式顺序?

2023-12-26

有没有办法明确说明 WHERE 条件发生的顺序?我意识到查询优化器将查看 WHERE 子句的所有部分,以确定满足查询的最有效方法,如这些答案中所述:

SQL 中 where 子句的顺序重要吗 https://stackoverflow.com/questions/11436469/does-order-of-where-clauses-matter-in-sql

SQL - WHERE 条件的顺序重要吗? https://stackoverflow.com/questions/3152182/sql-does-the-order-of-where-conditions-matter

但是,是否没有办法检查其他条件将依赖的条件?这些线程的答案之一涉及我所追求的内容,但没有提供解决方案:

select *
from INFORMATION_SCHEMA.TABLES
where ISNUMERIC(table_name) = 1 and CAST(table_name as int) <> 0

这可能会失败,因为可以在确定 table_name 字段是否为数字之前评估 CAST(因此会因无效转换而引发错误)。

肯定有办法实现这一目标吗?


使用派生表:

SELECT *
FROM (
      SELECT *
      FROM INFORMATION_SCHEMA.TABLES
      WHERE ISNUMERIC(table_name)=1
     ) AS i
WHERE CAST(table_name AS INT)<>0

或者,最有可能按顺序运行,您可以使用 CASE 语句:

SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE 0<>(CASE WHEN ISNUMERIC(table_name)=1 
          THEN CAST(table_name AS INT)
          ELSE 0 END)

需要注意的是,对于 SQL Server,存在 CASE-trick 失败的情况。请参阅CASE 文档、备注 https://learn.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql#remarks:

CASE 语句按顺序评估其条件,并在第一个满足条件的条件处停止。在某些情况下,在 CASE 语句接收表达式结果作为其输入之前,会对表达式进行求值。计算这些表达式时可能会出现错误。首先计算出现在 CASE 语句的 WHEN 参数中的聚合表达式,然后将其提供给 CASE 语句。例如,以下查询在生成 MAX 聚合的值时会产生除以零的错误。这发生在计算 CASE 表达式之前。

WITH Data (value) AS 
( 
SELECT 0 
UNION ALL 
SELECT 1 
) 
SELECT 
   CASE 
      WHEN MIN(value) <= 0 THEN 0 
      WHEN MAX(1/value) >= 100 THEN 1 
   END 
FROM Data ;

我怀疑其他 RDBMS 实现也可能如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Sql - WHERE 条件的显式顺序? 的相关文章

  • postgres 有 CLOSEST 运算符吗?

    我正在寻找这样的东西 给定一个表格 id number 1 7 2 1 25 3 1 01 4 3 0 查询SELECT FROM my table WHEREnumberCLOSEST 1 将返回第 3 行 我只关心数字 现在我有一个程序
  • 如何在 sqlalchemy 中创建基于文字的查询?

    我创建了一个函数来创建表达式 def test operator1 operation operator2 return literal column operator1 op operation operator2 现在当我用 test
  • 如何有效地从 DB2 表中删除所有行

    我有一个大约有 50 万行的表 我想删除所有行 如果我做简单的delete from tbl 事务日志已满 我不关心这种情况下的事务 无论如何我都不想回滚 我可以删除许多事务中的行 但是有更好的方法吗 如何有效地从 DB2 中的表中删除所有
  • SQL参数化查询不显示结果

    我的 DataAcess 类中有以下函数 但它没有显示任何结果 我的代码如下 public List
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • 将 SQL 数据中的一行映射到 Java 对象

    我有一个 Java 类 其实例字段 以及匹配的 setter 方法 与 SQL 数据库表的列名相匹配 我想优雅地从表中获取一行 到 ResultSet 中 并将其映射到此类的实例 例如 我有一个 Student 类 其中包含实例字段 FNA
  • SQLite HAVING 比较错误

    我有一个测试 SQLite 表 用于存储带有值的报告数据 CREATE TABLE IF NOT EXISTS test fact daily revenue date TEXT revenue NUMERIC product TEXT I
  • 复选框上的数据绑定

    我目前正在将数据从 SQL 数据库之一提取到我的应用程序中 我可以让它适用于我的文本框和其他项目 但是 我似乎无法让它适用于复选框 这是我正在使用的代码 DataTable dt new DataTable dt using SqlConn
  • 查找 PostgreSQL 中所有范围集合的所有交集

    我正在寻找一种有效的方法来查找时间戳范围集之间的所有交集 它需要与 PostgreSQL 9 2 配合使用 假设这些范围代表一个人可以见面的时间 每个人都可以有一个或多个空闲时间范围 我想找到all可以召开会议的时间段 即所有人都有空的时间
  • 如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀“N”?

    如何在 SQL Server 中使用 nvarchar 变量为 unicode 用户添加前缀 N 例如 给定这个变量 declare Query1 nvarchar max 我可以这样分配它 set Query1 N 但是如果我想使用怎么办
  • 独立对列进行排序,使得所有空值都位于每列的最后

    这是一个名为的示例表animal name color fox brown fox red dog gold 现在 我想要的是这样的结果 fox dog brown gold red 名称应该是结果的列 不同颜色值作为行 我的第一个想法是
  • 如何在 PostgreSQL 中使用具有多个值的 SQL LIKE 条件?

    有没有更短的方法来查找多个匹配项 SELECT from table WHERE column LIKE AAA OR column LIKE BBB OR column LIKE CCC 这个问题适用于 PostgreSQL 9 1 但如
  • 对多个数据库执行 SQL 查询

    我知道我的帖子与该论坛中的其他帖子的标题非常相似 但我真的找不到我需要的答案 这是我的问题 我的 Windows Server 上运行着 SQL Server 在我的 SQL Server 中 我有大约 30 个数据库 它们都具有相同的表和
  • 初级SQL部分:避免重复表达式

    我对 SQL 完全陌生 但我们可以说StackExchange 数据浏览器 https data stackexchange com 我只想按信誉列出前 15 位用户 我写了这样的内容 SELECT TOP 15 DisplayName I
  • 在 C#.NET 应用程序中使用 SQL Server 时间数据类型?

    如何使用 SQLtimeSQL Server 2008 中 C NET 中引入的数据类型 我一直在努力让它发挥作用 但没有成功 这是一个MSDN 文章 http msdn microsoft com en us library bb6751
  • 将表数据从一个 SQL Server 导出到另一台 SQL Server

    我有两个 SQL Server 都是 2005 版本 我想将多个表从一个表迁移到另一个表 我努力了 在源服务器上 我右键单击数据库 选择Tasks Generate scripts 问题是在下面Table View options没有Scr
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 如何在NiFi中映射流文件中的列数据?

    我有 csv 文件 其结构如下 Alfreds Centro Ernst Island Bacchus Germany Mexico Austria UK Canada 01 02 03 04 05 现在我必须将这些数据移入数据库 如下所示
  • SQL - != 'NULL' 的解释

    我的SSMS代码如下 Select top 50 From FilteredContact Where statuscode 1 and emailaddress1 NULL and telephone1 NULL and address1
  • 索引数量越少意味着插入、更新和删除速度更快? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐

  • nginx:将所有请求发送到单个html页面

    使用 nginx 我想保留 url 但无论如何实际上都会加载相同的页面 我将使用该网址History getState 在我的 javascript 应用程序中路由请求 看起来这应该是一件很简单的事情吧 location rewrite b
  • 重定向弹出窗口并发布消息

    我陷入了一个问题 我必须从弹出窗口重定向到不同的域并向其发布消息 这是场景 用户打开一个新的弹出窗口 该窗口位于同一域中 例如 http doamin one com http doamin one com 用户在弹出窗口中填写表格并单击提
  • 当程序有命令行参数时,如何使用 GDB 分析程序的核心转储文件?

    我的程序是这样运行的 exe p param1 i param2 o param3 它崩溃并生成一个核心转储文件 core pid 我想通过以下方式分析核心转储文件 gdb exe p param1 i param2 o param3 co
  • 如何将 i18n 用于一种语言 cakephp

    我如何设置 i18n 才能翻译成西班牙语 我不希望用户更改应用程序上的语言 所以我只需要用户以西班牙语查看该应用程序 我认为不需要任何路由 我是对的吗 如果您的网站只有一种语言 只需将西班牙语文本直接写入需要的视图文件中即可 无需加倍工作
  • 在 Dockerfile 中如何从网络驱动器复制文件

    我在以下位置托管了一个文件 无法更改 somenetwork somefiles myfile In my Dockerfile我想 COPY somenetwork somefiles myfile opt files file 有没有办
  • 如何以编程方式(在运行时)滑动 RecyclerView 的一行?

    我有一个 RecyclerView 里面有这样的项目 I use ItemTouchHelper SimpleCallback监听 swipe 和 onChildDraw 以在项目被滑动时绘制画布 再多滑动一下 我的问题 我想仅在项目列表中
  • gtk_box_pack_start 和 gtk_container_add 有什么区别?

    在我看来 这两个函数都可以用来向容器添加一些小部件 有什么不同 gtk pack start让您可以更好地控制子窗口小部件如何分配空间 您可以控制子窗口小部件是否 扩展 分配任何额外空间 填充 使用所有分配的空间或仅使用它们请求的最小空间
  • JavaScript - 将带有方法的对象保存为字符串

    我一直在寻找一种方法来做到这一点 但似乎找不到任何东西 我有不同的配置对象 我需要将它们保存为变量中的文本以便稍后进行处理 这里是一个示例 object args config config next null final delimite
  • 阅读此 XML 的好方法是什么?

    阅读此 XML 的好方法是什么 或者也许我可以以不同的方式构建 XML 我想要的是流程成为主要内容 然后您可以遵循任意数量的相关流程
  • 如何阻止 favicon.ico 请求?

    我没有 favicon ico 但我的浏览器总是发出请求 是否可以阻止浏览器从我的网站发出对网站图标的请求 也许 HTML 标头中有一些元标记 我首先要说的是 在网页中拥有网站图标是一件好事 通常 然而 这并不总是理想的 有时开发人员需要一
  • 错误:(gcloud.services.enable)用户无权访问项目(或者可能不存在):调用者没有权限

    我希望编写一个可以从 Cloud Shell 运行的脚本 以便在所有项目中启用 API 它正在成功地完成每个项目 但我收到每个项目都被拒绝的消息 我是所有者 所以不应该有任何许可问题 作为权限测试 如果我仅运行 gcloud service
  • C++三元运算符执行条件

    我不确定 C C 三元运算符的执行保证 例如 如果给我一个地址和一个布尔值来判断该地址是否适合读取 我可以使用 if else 轻松避免读取错误 int foo const bool addressGood const int ptr if
  • 为 jQuery 延迟对象提供默认的“失败”方法

    我正在使用 jQuery 编写一个 Javascript API 客户端 我的顶级请求方法如下所示 function request method uri params proxies var deferred Deferred ajax
  • Fabric.js 直线并单击选择

    我为这段代码创建了 3 种模式 选择行 画线和 删除行 看起来它正在工作 但我想改变两件事 例如 每次我选择一行时 我只需要单击它 你能告诉我如何改进我的代码吗 谢谢您的回答 这是我的代码
  • 在 SecurityContext 中找不到 Authentication 对象 - Spring 3.2.2

    我正在尝试从实现了的类中调用受保护的方法ApplicationListener
  • Firebase 云函数打字稿错误“并非所有代码路径都返回值”

    我正在使用 firebase 云功能和 firestore 交易来减少基于购买的产品的可用数量 部署时 它返回错误 错误 TS7030 并非所有代码路径都返回值 这是代码 import as functions from firebase
  • 在本地模拟/模拟 SQL Azure?

    与常规 MS 开发内容相比略有 OT 我想使用 MSSQL 2008 作为数据库来编写我的下一个 NET 4 0 应用程序 但以 Azure 就绪 的方式配置存储和访问方法 因此当新的财政年度在夏季开始时 我们可以想象做一些影响较小的事情
  • iPhone:Bonjour NSNetService IP 地址和端口

    请原谅我的 iPhone Objective C 新手身份 我已经使用 NSNetServiceBrowser 找到了我的 HTTP 服务器 但现在我只想找到该服务的 IP 地址和端口 我的委托方法中有类似以下内容的内容 NSNetServ
  • 使用 Java Stream API,查找变量的最高值,以及对变量所做的更改的流

    背景 场景 假设我们有一个不可变的对象 名为Transaction where transaction getAction 会返回一个TransactionAction enum这可以是DEPOSIT or WITHDRAW and tra
  • Sql - WHERE 条件的显式顺序?

    有没有办法明确说明 WHERE 条件发生的顺序 我意识到查询优化器将查看 WHERE 子句的所有部分 以确定满足查询的最有效方法 如这些答案中所述 SQL 中 where 子句的顺序重要吗 https stackoverflow com q