mysql - 获取存在特定值的行,如果不存在则显示具有其他值的行
问题描述
我有一个条件,当用户更改他的邮件 ID 时,状态列的值会更改为 100。如果邮件 ID 未更改,则状态列中的值将为 10。用户的 ID 始终相同。
ID MAIL Status
10248 xyz@xyz.com 10
10248 xyz1@xyz.com 100
10241 abc@abc.com 10
10249 pqr@pqr.com 10
10249 pqr1@pqr.com 100
10250 kbc@kbc.com 10
10251 axc@axc.com 10
因此,如果邮件 ID 已更改,则从此获取具有新邮件 ID 的行。就像如果某个 id 存在状态 100,则显示该 id 的行并且不显示该 id 的状态 10 行。如果 id 没有状态 100,则显示状态为 10 的行。
我试过了,但它返回了一个 id 的状态。
SELECT id, mail, IF(status=100, status=100,status=10)
FROM table1;
因此,对于 ID 10248 和 10249,我希望只有状态为 100 的行。
解决方案
据我了解,这就是您要执行的操作:
- 如果用户有一行
status code = 100
,则返回该行 - 否则,返回行
status code = 10
如果您的版本 (8.0+) 支持窗口函数,您可以执行以下操作:
SELECT id, mail
FROM (
SELECT id, mail,
ROW_NUMBER() OVER(
PARTITION BY id ORDER BY
CASE status
WHEN 100 THEN 0 -- Give status = 100 first priority
WHEN 10 THEN 1 -- Give status = 10 second priority
ELSE 2 -- Give anything else last priority
END
) AS RowNum
FROM table1
) src
WHERE RowNum = 1
推荐阅读
- javascript - 有没有办法在两个单独的 div 上添加一个事件侦听器,并能够知道用户何时在一个之外单击?
- architecture - 调度 - 单程序 VS 多程序示例
- amazon-web-services - 如何使用 AWS CLI 在 s3 存储桶中查找最小文件大小?
- javascript - 如何修复 Uncaught SyntaxError: Invalid or unexpected token
- .net - 在 WPF 项目中找不到正确的应用程序配置文件
- django - 如何使用Django中的相关名称从与第三个表有关系的两个不同表中获取对象?
- google-maps-api-3 - 如何修复 Google Maps API RefererDeniedMapError
- .net - 上传用户照片 microsoft graph api 时出错
- java - 如何检查 Spring-boot 或相关框架的所有合格 bean
- azure - 如何在 Azure AD 中批量创建/导入用户,以便所有人都可以单点登录到我的 SF 沙箱?