Помогите с простым SQL Query - PullRequest
       5

Помогите с простым SQL Query

1 голос
/ 24 сентября 2010

Таблица 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]

Допустим, если пользователь запросил испанские версии, тогда запрос должен вернуть все испанские версии [es-ES] из таблицыB для каждой записи в таблице A. Если испанская версия недоступна, просто верните соответствующую запись из таблицы A

Вывод должен выглядеть примерно так -

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

Любые предложения о том, какдобиться этого с использованием и без использования union?

1 Ответ

2 голосов
/ 24 сентября 2010

Похоже, что вы могли бы использовать 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         |
+------+--------+----------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...