首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL查询,如果找不到翻译,则获取默认值。

SQL查询,如果找不到翻译,则获取默认值。
EN

Stack Overflow用户
提问于 2015-08-28 04:10:06
回答 3查看 239关注 0票数 0

这是我的桌子:

代码语言:javascript
运行
复制
Product:
ID PRICE NAME    DESCRIPTION
1  100   laptop  laptop_desc
2  200   mouse   mouse_desc

Product_Translations:
PID  LANG NAME DESCRIPTION
1    ch   伊吾  伊吾伊吾

请不要担心产品表中的名称和描述。如果用户选择了默认语言,我们将保留它以避免连接。

现在,我需要编写一个查询,以便根据用户的语言从Product_Translations产品获取所有产品,如果在中找不到名称和描述的翻译,就从Product表中获取它们。我尝试了几种不同的方法,但没能成功。更新:

我需要Product中的所有列(在本例中,我只给出了2列,但实际的表有更多的列)。还有一个限制是,我需要使用JPA标准API生成这个查询,所以任何JPA不支持的SQL关键字都不适合我。

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-28 04:14:21

代码语言:javascript
运行
复制
SELECT p.ID, p.Price,
      COALESCE(pt.Name, p.Name) Name, 
      COALESCE(pt.Description, p.Description) Description
FROM Product p
INNER JOIN User u on u.ID = @MyUserID
LEFT JOIN Product_Translations pt ON pt.PID = p.ID AND pt.LANG = u.LANG
票数 0
EN

Stack Overflow用户

发布于 2015-08-28 04:13:09

使用左外连接:

代码语言:javascript
运行
复制
SELECT 
      p.id
     ,p.price
     ,ISNULL(t.name, p.name) AS translation
     ,ISNULL(t.description, p.description) AS description
FROM Product p
LEFT JOIN Translations t
   ON p.id = t.pid
   AND t.lang = ?

如果您使用其他DB更改合并(),这将在Server上工作。

票数 0
EN

Stack Overflow用户

发布于 2015-08-28 04:14:46

在您的情况下,您应该使用左联接。

代码语言:javascript
运行
复制
SELECT p.ID, p.PRICE, ISNULL(pt.NAME,p.NAME) AS NAME, p.DESCRIPTION 
FROM Product AS p 
    LEFT JOIN Product_Translations AS pt ON p.ID = pt.PID
WHERE pt.LANG = @UserLang

hsqldb functions中的ISNULL

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32263211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档