Id Name
1 Apple
2 Mango
3 Banana
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实现它的任何建议?
答案 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 |
+------+--------+----------------+