帮助简单的SQL查询

时间:2010-09-23 21:40:01

标签: sql oracle

表A

Id    Name  
1     Apple
2     Mango
3     Banana

表B

Id  Locale      Name_In_Lang
1   es-ES       Apple[Spanish]
1   it-IT       Apple[Italian]
2   it-IT       Mango[Italian]

让我们说如果用户请求了西班牙语版本,那么查询应返回表B中表A中每条记录的所有西班牙语[es-ES]版本。如果西班牙语版本不可用,则只需返回相应的记录表A

输出应该类似于 -

Id  Locale                  Name
1   es-ES                   Apple[Spanish]      
2                           Mango
3                           Banana

关于如何使用和不使用union实现它的任何建议?

1 个答案:

答案 0 :(得分:2)

您似乎可以使用LEFT JOIN,如下所示:

SELECT     ta.id, tb.locale, NVL(tb.name_in_lang, ta.name) name
FROM       tableA ta
LEFT JOIN  tableB tb ON (tb.id = ta.id AND tb.locale = ?)

NVL()函数允许您在遇到空值时替换值。

es-ES语言环境的输出如下所示:

+------+--------+----------------+
| id   | locale | name           |
+------+--------+----------------+
|    1 | es-ES  | Apple[Spanish] |
|    2 | NULL   | Mango          |
|    3 | NULL   | Banana         |
+------+--------+----------------+