SQL:标记哪个 WHERE 条件匹配

2024-01-20

这是一个理论问题,我想知道是否有一个好的方法来找出 WHERE 语句中的哪个条件匹配。

假设我有一个这样的查询:

SELECT * FROM table WHERE
    COND1 OR
    (COND2 AND COND3) OR
    COND4

有什么方法可以知道哪些条件使给定的行匹配(或不匹配)?


我想到的一个解决方案是向 SELECT 添加 CASE 子句,并重新运行该行的所有 WHERE 条件:

SELECT *, which_cond = CASE .... END CASE ...

CASE是一种可能性。但写起来会更短IF() http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if(至少对于MySQL):

SELECT *, IF(COND2, 1, 0) AS cond2, IF(COND3, 1, 0) as cond3 ... 

和每一个cond*如果其值为1.

当然,检查是否存在是没有意义的COND1匹配与否。对于您返回的所有结果,COND1是真的。所以IF(COND1, 1, 0)总会回来的1(在你的例子中)。

Update:
至少对于 MySQL,我发现,如果您只想获得其中一个,那么以下内容就足够了1 or 0结果:

SELECT *, COND2 AS cond2, COND3 as cond3 ...

关于马克的回答,如果您使用,您可以避免将条件写两次HAVING代替WHERE (HAVING作为对别名的访问):

SELECT *, COND2 AS cond2, COND3 as cond3
FROM table
HAVING COND1 AND (cond2 OR cond3)

(注:大写为实际条件表达式,小写为别名)

更新2:

好吧,它变化不大:您只需检查通过连接的条件OR在您的更新版本中检查是否足够COND2是真是假。如果是这样,那么COND3也是如此,反之亦然。

SELECT *, COND1 AS cond1, COND2 as cond2, COND4 as cond4
FROM table
HAVING cond1 OR (cond2 AND COND3) OR cond4

我认为这一点很清楚。

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

SQL:标记哪个 WHERE 条件匹配 的相关文章

  • 如何检查 SQL Server 数据库的 Azure 定价层更改历史记录?

    两个月前 我创建了一个具有 S0 定价层的 AZURE SQL 数据库 但不知何故 同一数据库的定价等级突然升级到 P15 持续 10 天 然后再次降级到 S0 我想查一下这是何时以及如何发生的 有什么方法可以从 Azure 门户或使用任何
  • 更新或插入 SQL Server 时忽略错误行

    我的项目必须处理巨大的数据库 在最坏的情况下 它可能是超过8000万行 现在 我有 2 张桌子T1 and T2 我必须从表中复制数据T1到餐桌T2 如果表中的一行T1表中已存在T2 相同主键 然后更新该行其他列的数据T1 to T2 否则
  • PDO 从表中获取一列到一维数组中

    我对 PDO 和让它们与 MySQL 一起工作还很陌生 我似乎在插入新数据和检索单个结果方面进展顺利 但是我坚持了下来 我有一张由配料组成的桌子 我试图将所有配料放入一个数组中 我已经直接在 SQL 中运行查询 它显示了所有结果 但是使用
  • 从数据库中删除样式 (SQL Server)

    我正在处理旧的数据库表 其中有附加了 CSS 的值 例如 font size 4 Select your gender font font size 4 Select your country font 除了一次删除一个样式之外 还有什么方
  • 执行 SELECT 或 INSERT

    我想写一些类似的东西CASE以我想要的方式在 PostgreSQL 中声明SELECT从表中 如果什么也没找到 我想INSERT改为放入表中 我的示例表allocated ideas看起来像这样 challenge id user id i
  • MySQL 存储浮点数

    我正在尝试保存这么长的浮点数 13 00386644742523 它基本上是 Lat 和 Lng 值 当我将它保存在数据库中时 它被存储为 13 0039 您应该明确使用精度并且类型应该是DECIMAL NOT FLOAT因为小数点后的每一
  • PHP Microsoft Excel 文件生成/导出类

    我一直在寻找一个好的 Excel 文件生成类 但还没有找到 我的首要问题是 虽然我可以在 Excel 中打开导出的文件 运行 2007 年 但我总是收到一条警告 文件的格式与文件扩展名不同 我注意到 phpMyAdmin 中的 Excel
  • MySql If then 在 Select 语句中

    我想在 mysql select 中使用 IF THEN 语句 但无法弄清楚 当还没有评论时 commentcreated 值应该是该项目本身的创建值 这是查询 SELECT item count comments itemid AS co
  • 我什么时候应该创建数据库索引? [复制]

    这个问题在这里已经有答案了 何时为表设置索引 是在创建表期间还是在性能调优时 索引的优点和缺点是什么 许多 大多数 DBMS 使用索引来支持唯一约束 始终创建索引以强制执行唯一约束 它们 约束 对于数据库的正确操作至关重要 如果您可以选择如
  • SQL Server 如何查看日期是否为当前月份?

    我有一个Ticket Date格式为的列YYYY MM DD HH MI SS 我想检查是否Ticket date是在当前月份 到目前为止我有 Ticket date gt 2015 04 01 and Ticket date lt 201
  • 删除每行列中重复的 GPS 坐标

    我有一列包含 GPS 坐标 每行都有一组地理多边形坐标 大多数线路都有重复的 GPS 坐标 一列中的经度和纬度完全重合 Example 多多边形 23 453411011874813 41 74245395132344 23 4539726
  • BIT(1) 的存储大小是多少?

    我一直认为a的存储大小BIT 1 列为 1 位 But http dev mysql com doc refman 5 6 en storage requirements html http dev mysql com doc refman
  • Mysql启动问题|错误!服务器退出而不更新PID文件

    有任何想法吗 Joshs MacBook Pro cdwhp joshc mysql server start Starting MySQL ERROR The server quit without updating PID file u
  • android-security :Google Play 警告:您的应用程序包含 SQL 注入问题

    作为我们应用程序的一部分 我们使用两个 contentProvider 但两者都受到 android exported false 的保护 但我们仍然收到一封 Google Play 警告邮件 您的应用程序包含 SQL 注入问题 他们提到的
  • 如何在 Node 中使用 Mysql2 使用 async 和 pool 获取 MySQL 的 insertId?

    我正在尝试将 async wait 与 mysql2 和池一起使用 但我认为我做错了 下面是我的代码 正如我所说 我不确定我是否在这里做事 const pool mysql createPool host localhost user ro
  • 检查字段是否为空

    如果我想检查该字段是否有除 null 和空之外的其他字符 查询是否正确 select CASE WHEN description IS NULL THEN null WHEN description IS NOT NULL THEN not
  • Mysql 更快的 INSERT

    好的 我有大约 175k 个 INSERT 语句 相当大的 INSERT 语句 例如 INSERT INTO gast ID Identiteitskaartnummer Naam Voornaam Adres Postcode Stad
  • 使用 Oracle 数据库的 JOIN 语法进行更新

    首先 我执行以下 SQL 语句 drop table names drop table ages create table names id number name varchar2 20 insert into names values
  • 根据同一 select 语句中先前计算的行(或列)计算新行(或列)

    我正在尝试根据年度销售增长预期来计算年度预期销售量 在一张表中 我有实际销量 create table Sales ProductId int Year int GrowthRate float insert into Sales valu
  • 从 Oracle 获取包方法和参数

    我正在寻找 Oracle 查询来获取 Oracle 包 过程的所有参数 我知道有一个视图或表可以提供此功能 但我似乎不记得它是什么 注意 我并不是要从 user objects 获取包列表 而是要获取包 中每个过程的数据类型和参数名称 Th

随机推荐

  • 如何在 PyOpenGL 中面向对象进行击退?

    我正在 PyOpenGL 中制作游戏 当物体足够近时 我想在相机上应用击退 击退只是根据敌人面对的方向将镜头向后移动 我在一张纸上模拟了这个并发现 xc person pos 0 camera pos 0 yc person pos 1 c
  • 为什么我在尝试删除表视图 ios 中的某个部分时收到断言错误

    我有一个包含一些部分的 tableView 这些部分都有一个页脚 然后我在 Tableview 本身上有一个 tableViewFooter 如果我向下滚动到表格视图的底部并删除最后一部分 倒数第二个及以上 上方任何部分中的最后一项 因此完
  • 使用 PrintDocument 打印图像。如何调整图像以适合纸张尺寸

    在 C 中 我尝试使用 PrintDocument 类和以下代码打印图像 该图像的尺寸为 1200 像素宽度和 1800 像素高度 我正在尝试使用小型 zeebra 打印机在 4 6 纸张上打印此图像 但程序只打印 4 6 的大图像 这意味
  • 将项目拖到父级之外并进入 UI 对话框

    我有一个 li class draggable 和一个 div class dropable 位于 ui 对话框 div 内 当我尝试拖动 li 时 我无法将其拖动到它的父元素之外 所以我这样做了 draggable draggable c
  • 当存在日期类型列时,查找字符串“NA”并将其替换为 NA

    我想搜索所有列 NA 并替换为NA但当存在日期列时会遇到问题 library lubridate x data frame a c NA NA b c today today x x NA NA 返回错误 Error in charToDa
  • Hibernate命名策略

    我正在使用 Spring Boot 构建 REST Web 服务 并尝试使用 hibernate 作为 orm 映射器 而无需任何 xml 配置 我基本上可以正常工作 但我遇到了配置问题 我实例化LocalContainerEntityMa
  • 请解释一下Android build.gradle groovy语法

    以下 groovy 语法的真正含义是什么 Gradle 文档介绍了 build gradle 的用法just时髦的 Android 团队已将默认的 build gradle 简化到它看起来不像代码 至少对我而言 请用常规语法解释一下这是做什
  • 使用javascript更改asp.net“ControlParameter”控件的属性“DefaultValue”

    我已经知道如何执行此操作 但我意识到控件 ControlParameter 没有 Id 属性 JS 需要该属性 是否有其他方法可以使用 JavaScript 更改 DefaultValue 属性而不需要使用 Id 属性 这是我一直在使用的
  • 消除 QWebChannel 属性通知器信号警告

    我在用着QWebEngineView with QWebChannel 类似于 class AppView QWebEngineView def init self QWebEngineView init self self ch QWeb
  • 使用 Intellij 指定工件名称

    我想设置使用 Intellij 构建的 jar 工件的文件名 但当我更改它时 它在输出文件中不会更改 使用 2017 2 5 我可以使用以下步骤更改工件名称 文件 gt 项目结构 在项目设置 gt 工件下 添加新的工件或修改现有的工件 在
  • hadoop 流:在 EMR 上导入模块

    上一个问题已解决 https stackoverflow com questions 6811549 how can i include a python package with hadoop streaming job 6811775
  • iOS 8 swift 社交框架

    我一直在编写一个应用程序 需要使用社交框架通过 Twitter 和 Facebook 共享文本 我让它工作 但它没有关闭 然后我想起了完成处理程序 但无论我做什么 这个处理程序都会继续给我错误 var okFacebook Bool SLC
  • 在react中读取firestore子集合数据 - 如何在子集合where查询中设置父id

    我正在尝试弄清楚如何从 React 中读取 firestore 子集合数据 我见过这个博客 https dev to rossanodan how to fetch subcollections from cloud firestore w
  • JQuery 添加隐藏的 HTML 元素

    HTML
  • GTK+ 设置字体大小

    As before https stackoverflow com questions 41072683 gtk menuitem size small 菜单项对于我的用例来说太小了 因此 我的问题是 如何增加文本 保存 加载 和 退出 的
  • 选择像素的 4 个邻居[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何选择像素的 4 个邻居matla
  • 如何获取更改前的属性值? (在 QML 中)

    我想了解以下问题 如何在声明式中存储属性的先前值 QML语言 任务是在属性值更改之前将其记住为另一个属性 问题在于现有的信号机制onPropertyNameChanged 该机制在修改后发出有关属性更改的信号 并且在这个处理程序中 不可能获
  • 如何从 java fx 应用程序打开默认系统浏览器?

    我正在尝试从 javafx 在默认系统浏览器中打开一个 web url 我没有找到任何关于此的官方文档 有什么线索吗 编辑 我发现了教程 http blog ngopal com np 2011 02 09 open default bro
  • MySQL DROP 所有表,忽略外键

    有没有一种简单的方法可以从 MySQL 数据库中删除所有表 忽略其中可能存在的任何外键约束 我发现生成的 drop 语句集很有用 并建议进行以下调整 将生成的 drop 限制到您的数据库 如下所示 SELECT concat DROP TA
  • SQL:标记哪个 WHERE 条件匹配

    这是一个理论问题 我想知道是否有一个好的方法来找出 WHERE 语句中的哪个条件匹配 假设我有一个这样的查询 SELECT FROM table WHERE COND1 OR COND2 AND COND3 OR COND4 有什么方法可以