MYSQL 中 WHERE 子句中的 CASE

2023-12-01

问题就如标题所说的那样简单,但这里有一个逻辑。 这是我的代码

CREATE TABLE `inf_brand_images` (
`id` bigint(99) NOT NULL AUTO_INCREMENT,
`brand` varchar(255) NOT NULL,
`thumb` text NOT NULL,
`is_active` int(2) NOT NULL DEFAULT '1',
`cmp_brand` varchar(1024) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6458 DEFAULT CHARSET=latin1

这是该表中的数据

ID | brand  | thumb  |is_active| cmp_brand
1  | NIKE   | a.png  | 1       | 
2  | DUNHILL| b.png  | 1       |
3  | NIKE   | c.png  | 1       | 123_NIKE
4  | NIKE   | d.png  | 1       | 789_NIKE

cmp_brand 的前缀是一些 ID,例如我的例子中的 123_ 和 789_。 现在如果我搜索NIKE,那么我有两个参数,一个是NIKE,另一个是id_NIKE。其中id可以是123或456或任何其他。所以对于NIKE搜索我有两个参数,一个是brand = NIKE,另一个是cmp_brand =123_NIKE(我自动将 ID 与品牌名称连接起来)

我想要的是

IF cmp_brand is '' then compare with brand ELSE compare brand AND cmp_brand.

这是我尝试过的,两者都不起作用

SELECT thumb 
FROM inf_brand_images 
where is_active=1  AND 
CASE WHEN cmp_brand = '' THEN brand='NIKE' 
ELSE cmp_brand='123_NIKE' END

 SELECT thumb 
 FROM inf_brand_images 
 where is_active=1 AND 
((cmp_brand = '' AND brand='NIKE') OR (cmp_brand='123_NIKE'))

您的第二次尝试走在正确的轨道上,使用逻辑AND/OR分组而不是CASE,但如果你想prefer行匹配cmp_brand覆盖有空的行cmp_brand并期望只返回一个结果,构建你的ORDER BY对非空进行排序cmp_brand首先,将总体结果限制为 1。

SELECT thumb 
FROM inf_brand_images 
WHERE
  is_active=1 AND 
  ((cmp_brand = '' AND brand='NIKE') OR (cmp_brand='123_NIKE'))
/* non-empty cmp_brand will sort first */
ORDER BY cmp_brand <> '' DESC
/* and the end result is limited only to the first sorted row
   which will be the cmp_brand if matched, or the brand otherwise */
LIMIT 1

http://sqlfiddle.com/#!2/d176b/2

这是有效的,因为表达式cmp_brand <> ''计算结果为布尔值true/false,MySQL 将其解释为1/0。对这些值进行降序排序会强制非空值先排序(1 在 0 之前)。

评论后更新:

由于您确实有可能返回多行,因此您不能依赖ORDER BY。相反,您可以执行LEFT JOIN针对同一张桌子。一方面,匹配cmp_brand = ''另一边比赛cmp_brand = '123_NIKE'。重要的是,返回thumb专栏来自both连接的两侧。

将其包装在子查询中FROM子句,那么在顶层你可以使用SELECT CASE更喜欢cmp_brand如果非空。

SELECT DISTINCT
  CASE WHEN cbcb IS NOT NULL THEN cbthumb ELSE bthumb END AS thumb
FROM (
  /* Return thumbs from both sides of the join */
  SELECT 
    b.thumb AS bthumb,
    b.cmp_brand AS bcb,
    cb.thumb AS cbthumb,
    cb.cmp_brand AS cbcb
  FROM
    inf_brand_images b
    /* join the table against itself with the matching cmp_brand in the join condition */
    LEFT JOIN inf_brand_images cb
      ON b.brand = cb.brand
      AND cb.cmp_brand = '123_NIKE'
  WHERE 
    /* The WHERE clause looks for empty cmp_brand on the left side of the join */
    b.brand = 'NIKE' AND b.cmp_brand = ''
) thumbs
  • 以下是 123_NIKE 匹配的示例:http://sqlfiddle.com/#!2/dfe228/31
  • 124_NIKE 不匹配的示例:http://sqlfiddle.com/#!2/dfe228/32
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MYSQL 中 WHERE 子句中的 CASE 的相关文章

  • TCPDF - 来自 mysql 的打印表显示重复的第一行

    我是 TCPDF 的新手 我面临的小问题是所有输出数据都显示同一行 我的意思是第一条记录重复数据库中存在的总数据 行 的次数 这是我的代码 tbl header
  • MySQL 全文搜索之谜

    我们的网站上有一个使用 MySQL 全文搜索的简单搜索 但由于某种原因 它似乎没有返回正确的结果 我不知道这是否是 Amazon RDS 我们的数据库服务器所在的位置 或我们请求的查询的某种问题 这是数据库表的结构 CREATE TABLE
  • MySQL:记录之间的平均间隔

    假设这张表 id date 1 2010 12 12 2 2010 12 13 3 2010 12 18 4 2010 12 22 5 2010 12 23 如何仅使用 MySQL 查询找到这些日期之间的平均间隔 例如 此表上的计算将是 2
  • 如何备份整个MySQL数据库的所有用户、权限和密码?

    我需要备份整个 MySQL 数据库 其中包含所有用户及其权限和密码的信息 我看到选项http www igvita com 2007 10 10 hands on mysql backup migration http www igvita
  • 可以有多个用户作为 MySQL 存储过程的定义者吗?

    我在 MySQL 存储过程方面遇到了一些困难 并且感到有点沮丧 我有一组由 Bob 创建的 SP 由于他是定义者 只有他才能看到它们的 CREATE 语句 修改它们等 Mary 可以在 MySQL Workbench 的架构中看到 Bob
  • 为什么不能将 MYSQL 函数传递到准备好的 PDO 语句中?

    在我看来 以下脚本应该有效 stmt db gt prepare UPDATE table SET status date modified stmt gt execute array 1 NOW 但经过时NOW 进入准备好的声明中 什么也
  • MySQL - 替换列中的字符

    作为一个自学成才的新手 我给自己制造了一个大问题 在将数据插入数据库之前 我将字符串中的撇号 转换为双引号 而不是 MySQL 实际需要的反斜杠和撇号 在我的表增长到超过 200 000 行之前 我认为最好立即纠正此问题 所以我做了一些研究
  • 如何删除非空约束?

    假设创建了一个表 如下所示 create table testTable colA int not null 您将如何删除非空约束 我正在寻找类似的东西 ALTER TABLE testTable ALTER COLUMN colA DRO
  • 在关系数据库中存储树结构的已知方法有哪些? [关闭]

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

    尝试使用 Eclispse 在 Ubuntu 上运行 Python 2 SQLAlchemy 0 8 和 MySQL5 2 但我不断收到以下错误 我使用 pymysql 实际上是 pymysql3 引擎 模块监视器 from sqlalch
  • 将程序存储在 phpMyAdmin 中

    我必须将存储过程添加到 MySQL 数据库 问题是托管提供php我的管理员来管理数据库 我在网上搜索了一下 想法是运行创建程序的MySQL本机语句 但由于程序的代码通常可能有 我们必须更改 MySQL 中的分隔符 php我的管理员没有这个选
  • MYSQL 查询 WHERE IN 与 OR

    我开发了一个使用 OR 查询的系统 SELECT FROM tableA JOIN tableB ON idA idB WHERE idA 1 OR idA 2 OR idA 3 OR idA 4 OR idA 5 OR idA 100 与
  • MySQL - 查询合并具有相同 id 的行并保留该 id 的所有条目但作为一条记录

    我一直在处理本地保存在 wamp 服务器上的 mysql 数据库中的表 我正在使用 wamp 中的 phpmyadmin 区域来运行查询 我正在尝试获取数据来执行以下操作 谁能帮我制作一张包含许多植物记录的表格 植物可以有多个名称 表格将其
  • MySQL 获取时间优化

    o我有一个包含 200 万个寄存器的表 但它很快就会增长得更多 基本上 该表包含具有相应描述符的图像的兴趣点 当我尝试执行选择在空间上靠近查询点的点的查询时 总执行时间花费太长 更准确地说 持续时间 获取 0 484 秒 27 441 秒
  • Mac OS X Yosemite/El Capitan 上自动启动 MySQL 服务器

    我想在启动时自动启动 MySQL 服务器 这在小牛队是可能的 但在优胜美地似乎不起作用 edit 似乎这也适用于 El Capitan dcc 非常接近 这是 MySQL 在 Yosemite 上再次自动启动的方式 The com mysq
  • 使用 Hibernate 和 MySQL、全局和本地进行 Spring 事务管理

    我正在使用 MySQL Server 5 1 Spring 3 0 5 和 Hibernate 3 6 开发 Web 应用程序 我使用 Springs 事务管理 我是新手 所以如果我问一个容易回答的问题 请耐心等待 1 我读到了有关全局 x
  • MySQL 将 ÅäÖ 视为 AAO?

    这两个查询给了我完全相同的结果 select from topics where name Harligt select from topics where name H rligt 这怎么可能 看起来mysql在搜索时会将 翻译成aao
  • CakePHP - 获取上次运行的查询

    我想获取 CakePHP 运行的最后一个查询 我无法在 core php 中打开调试 也无法在本地运行代码 我需要一种方法来获取最后一个 sql 查询并将其记录到错误日志中而不影响实时站点 该查询失败但正在运行 像这样的事情会很棒 this
  • #1115 - 未知字符集:'utf8mb4'

    我的电脑上运行着一个本地网络服务器 用于本地开发 我现在正处于导出数据库并导入到我的托管 VPS 的阶段 导出然后导入时出现以下错误 1115 未知字符集 utf8mb4 有人能指出我正确的方向吗 该错误明确表明您没有utf8mb4您的阶段
  • 使用 DBCP 配置 Tomcat

    在闲置一段时间 几个小时 后 我们收到了 CommunicationsException 来自 DBCP 错误消息 在异常中 位于这个问题的末尾 但我没有看到任何配置文件中定义的 wait timeout 我们应该看哪里 在 tomcat

随机推荐

  • 如何确保 WidgetKit 视图显示 @FetchRequest 的正确结果?

    我有一个将 Core Data 与 CloudKit 结合使用的应用程序 更改在设备之间同步 主要目标具有后台模式功能 并带有选中的远程通知 主目标和小部件目标都具有相同的应用程序组 并且都具有 iCloud 功能 服务设置为 CloudK
  • 简单的 jquery 下拉菜单 -clearTimeout、setTimeout 问题

    HTML ul class topnav li a href span One span a li li a href span Two span a li li li li a href span Three span a li ul c
  • 使用表单身份验证获取 Windows 用户名的更好方法?

    我继承了一个使用表单身份验证的项目 但最近的功能请求要求我获取某些用户的 Windows 用户名 这是一个使用表单身份验证的网站 我不想更改它 此时工作量太大 但我有一个功能请求 允许我们的内部用户更轻松地登录 通常无需输入他们的密码或用户
  • 如何阻止 c)change 复制到我的粘贴缓冲区?

    我想做的一个常见的事情是猛拉 some text 然后用它来改变 some other text 所以我将光标移至一些文本 然后yi 抓住some text 我现在该如何更换some other text 如果我做di 然后我的复制粘贴寄存
  • 下载的可执行文件无法在主机上执行 - MacOS Monterey 12.4,Silicon Chip

    我最近尝试运行我的 flutter 应用程序 但是 当我尝试这样做时 出现以下错误 An error was encountered processing the command domain NSPOSIXErrorDomain code
  • z3Opt 使用 qfnra-nlsat 优化非线性函数

    我正在尝试使用 z3Opt 来优化真正的非线性函数 但即使对于像下面这样的简单情况 http rise4fun com Z3Opt JbaU 结果不是预期的那样 就像 z3 一样 它根本没有优化 任何人都可以帮助我理解吗 目前不支持非线性函
  • 选择带有空格或某个字符的数据属性值

    我试图选择一个包含空格或特定字符的数据属性值 但它不太喜欢它 下面是我为单字属性值工作的代码 div data roomtype this data roomtype animate opacity 0 1 100 我还整理了一个非常简化的
  • 使用 Kustomize 跨多个环境和应用程序进行通用配置

    是否可以有一个在多个环境和应用程序之间共享的通用配置文件 例如 ConfigMap 我知道通过多个环境叠加来实现这一点很简单 但是对于应用程序来说 高于它的级别怎么样 如果我有以下结构 Base App1 Configmaps Kustom
  • jQuery 按键箭头键

    我试图在 jQuery 中捕获箭头键按下 但没有触发任何事件 function html keypress function e console log e 这会生成字母数字键的事件 但删除键 箭头键等不会生成事件 我做错了什么而没有捕捉到
  • CSS 选择器 - 选择特定的子元素

    这是我的代码片段 div class totals table table div
  • Ruby 中的“eval”什么时候是合理的?

    eval 应该是令人讨厌的吗 启发了这一点 大多数人都同意eval不好 在大多数情况下有更优雅 更安全的替代品 所以我想问 如果eval经常被滥用 它真的需要作为一种语言功能吗 难道是恶多于善吗 就我个人而言 我发现它唯一有用的地方是插入配
  • 如何在 C# 中将 Unicode 值转换为表情符号字符串? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我正在尝试将如下所示的表情符号转换为 C 代码 以便我可以将代码放入 TreeView 节点或 facebook 或其他社交引擎中 我尝试了飞机的代码 并在树节点中显示了一架小飞机 但
  • Java——关闭扫描器和资源泄漏

    我正在学习 Java 并从事一些有趣的项目 我遇到的一个问题是 当我使用Scannerobject Eclipse 警告我 资源泄漏 扫描 永远不会关闭 所以 我添加了一个scan close 在我的代码末尾 它会处理警告 问题的出现是因为
  • 使用 Asp.net Core 的 FromForm 和 IFormFile

    我想上传带有模型数据的图像文件 所以我使用FromForm with IFormFile in Asp net core api HttpPost public IActionResult AddData FromForm AddDataM
  • SortedDictionary 中的第一项?

    有许多 many讨论如何从 a 中获取 第一个 项目Dictionary 以及关于为什么这样的事情实际上不是一个好主意的各种答案 因为没有内部顺序 但我的是一个SortedDictionary 所以这些论点不适用 但我找不到从 a 中获取第
  • Google 地图 API V2“无法加载地图。无法联系 Google 服务器

    我已经检查并仔细检查了我在 Google Console 上注册的 APIkey 但仍然收到以下错误 12 05 16 31 12 940 E Google Maps Android API 12334 Failed to load map
  • 我可以让 MOXy 在生成 json 时不输出属性吗?

    我的 JAXB 对象模型的实例包含一个属性 我希望在为该实例生成 Xml 时输出该属性 但在生成 json 时则不想输出该属性 即我想要
  • JAVA给变量赋值后仍然为空

    public void crearCliente int i k j l registro r new registro k lr getSize for i 0 i lt k i r lr get i l r getSize String
  • ContainerView 嵌入 ViewController:出口为零

    当我尝试使用函数从其父视图控制器更新容器视图内容时 更新初始 ViewDidLoad 集后 应用程序崩溃 好像所有的Outlet都变成了零 您需要在容器视图中获取对视图控制器的引用 然后您应该可以访问其所有出口 为容器视图控制器的segue
  • MYSQL 中 WHERE 子句中的 CASE

    问题就如标题所说的那样简单 但这里有一个逻辑 这是我的代码 CREATE TABLE inf brand images id bigint 99 NOT NULL AUTO INCREMENT brand varchar 255 NOT N