首页 > 解决方案 > 如果第一个为空,则选择语句返回一个值或另一个值

问题描述

我有一个书的表如下:

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

标签: db2

解决方案


试试这个:

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;

推荐阅读