db2 - 如果第一个为空,则选择语句返回一个值或另一个值
问题描述
我有一个书的表如下:
id locale name book_id ...
1 "en-GB" The book 421
2 "fr-FR" Le livre 421
...
我需要为给定的语言环境选择书名(例如“fr-FR”),但是如果没有设置第一个,则默认情况下使用该语言环境检索名称(“en-GB”),这将是总是设置。我怎么能那样做?我正在使用 DB2。我试过以下说法:
SELECT CASE WHEN B.NAME IS NOT NULL THEN B.NAME ELSE A.NAME END AS NAME FROM BOOK A JOIN BOOK B ON B.BOOK_ID = A.BOOK_ID WHERE A.LOCALE = "en-GB" AND B.LOCALE = "fr-FR"
但是,这仅在定义了两个语言环境时才有效,但在我需要的情况下(未设置第二个语言环境时)无效。
提前致谢。
用我自己的答案编辑:我终于使用了一个 UNION 来实现这一点:
SELECT NAME FROM BOOK WHERE BOOK_ID = 421 AND LOCALE = "en-GB"
UNION ALL
SELECT NAME FROM BOOK WHERE BOOK_ID = 421 AND LOCALE = "fr-FR"
FETCH FIRST 1 ROW ONLY
解决方案
试试这个:
select *
from mytable
where book_id=421 and locale in
--('*', 'en-GB')
('fr-FR', 'en-GB')
order by case when locale='en-GB' then 1 else 0 end
fetch first 1 row only;
推荐阅读
- linux - 我想在运行命令时获得变量的输出,但它都被合并到一行中。我应该怎么办?
- sql - af:query 中的多选 LOV
- java - Selenium webdriver - 无法在模式对话框中找到元素
- node.js - 使用 async/await 的 mongodb 连接 - NodeJS
- python - 如何创建带有图片的博客文章类型的表单?不断出现错误:NameError:未定义名称'blog_post_id'
- php - 从 Laravel 中的 Mysql Pivot 表中获取列并返回 JSON 对象
- eclipse-cdt - 如何以编程方式设置 Eclipse CDT 配置构建目录?
- c# - 是否还有 Microsoft Authenticator 开发 API?我该如何使用它?
- php - 如何在 echo 部分插入 php 代码。WordPress
- react-native - 无法使用 AWS S3 使用 react native 上传或获取任何文件