Правое внешнее соединение со статическими значениями в DB2

У меня есть таблица table, и я пытаюсь показать все строки с id в определенном списке. Если нет строк с этим идентификатором, я бы отобразил null значений.

Очевидно, что если бы эти id, которые я хочу выбрать, находились в другой таблице, то решением был бы просто оператор right join.

Проблема в том, что такой таблицы не существует, и пользователь вводит список ids.

Я пытаюсь решить эту проблему с помощью инструкции right join (values ..) on ..=... Но я не могу указать имя столбца для вложенного оператора (со статическими values). И поэтому я не могу написать действительное предложение on.

Например, у меня есть таблица table:

id val    
-- --
0 0.1
2 -0.5
7 1.1

Затем пользователь динамически выбирает список ids, который не обязательно содержится в списке ids таблицы. Например, если пользователь выбирает 0,1,2,3, я должен отобразить:

id val    
-- --
0  0.1
1  null
2  -0.5
3  null

Я пытаюсь сделать что-то вроде

select * from table right outer join (
    values (0),(1),(2),(3)
) as static_values on table.id = static_values[1]

Очевидно, что static_values[1] неправильно, но я должен назвать столбец, чтобы выполнить join, и я не знаю, как еще это сделать.


person Antonio Ragagnin    schedule 24.02.2014    source источник
comment
Какая СУБД, пожалуйста? например В Sql Server вы можете передать параметр таблицы, а в Oracle также есть такие параметры, как массив или вложенные таблицы.   -  person StuartLC    schedule 24.02.2014
comment
Спасибо за вопрос, DB2.   -  person Antonio Ragagnin    schedule 24.02.2014


Ответы (1)


Вы должны уметь:

select * 
  from table 
 right outer join (values (0),(1),(2),(3)) as static_values(id) 
    on table.id = static_values.id
person beny23    schedule 24.02.2014
comment
Оно работает! спасибо, я не знал синтаксиса as table_alias(column aliases) - person Antonio Ragagnin; 24.02.2014