我的书本表如下:
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
答案 0 :(得分:1)
尝试一下:
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;
答案 1 :(得分:0)
我在上一个回答中说View是指存储过程。 您可能需要看一下创建存储过程。在SP中,您可以添加if else语句。
CREATE PROCEDURE SomeProcedure
AS
BEGIN
IF Exists(SELECT 1 FROM Book WHERE locale = "en-GB")
SELECT * FROM Book WHERE locale = "fr-FR"
ELSE
SELECT * FROM Book WHERE locale = "en-GB"
END
这样的事情。