2010-05-27 5 views
1

Есть ли способ запросить разные базы данных на основе значения столбца в запросе?Запрос таблиц на основе других значений столбца

Скажем, например, у вас есть следующие столбцы:

  • идентификатор
  • part_id
  • attr_id
  • attr_value_ext
  • attr_value_int

Затем вы запустите запрос, и если attr_id is '1' возвращает столбец attr_value_int но если attr_id больше, чем «1», он объединяет данные из другой таблицы на основе attr_value_ext.

+1

ли вы имеете в виду, что другая таблица изменяется в зависимости от значения attr_value_ext? Если да, то сколько возможностей есть? –

+2

Хм, четыре ответа, все совершенно разные друг от друга. Вам нужно дать более подробную информацию. Некоторое количество проб и ожидаемых результатов будет хорошим началом. – APC

+1

Есть ли конкретная база данных, на которую вы нацеливаетесь? –

ответ

4

что-то вроде этого?

select case when a.id = 1 then a.attr_value_int 
      when a.id > 1 then b.some_other_col 
      else null end as whatever 
from first_table a 
    left outer join other_table b 
    on (a.attr_val_ext = b.id) 
/
+0

Да, просто так. Я должен попробовать. – blcArmadillo

1

трудно дать точный ответ, основанный на этом описании ...

вы должны быть в состоянии сделать это с UNION

select stuff from one table where attr_id = 1 
UNION 
select stuff from another table where attr_id > 1 
0

Ничто в SQL спецификации, но часто БД конкретного функции, которые сделают это для вас. Например, декодирование на oracle будет работать для вас.

2

Вы можете использовать условное в предложении on, как:

select case when attr_id = 1 then attr_value_int 
       when attr_id = 2 then t1.value_int 
       when attr_id = 3 then t2.value_int 
      end 
from  YourTable yt 
left join Table1 t1 
on  t1.attr_id = 2 and yt.part_id = t1.part_id 
left join Table2 t2 
on  t1.attr_id = 3 and yt.part_id = t2.part_id 

Это будет работать лучше, если число таблиц является относительно небольшим, и известно заранее. В противном случае вам придется прибегать к динамическому SQL или создавать последующий запрос от клиента.

+1

Было ли второе соединение предполагаемым для Table2? –

+0

@Tom H .: Да, отредактировал :) – Andomar

0
SELECT ID,PART_ID,ATTR_ID,CASE 
    WHEN attr_id =1 THEN attr_value_int 
    WHEN attr_id >1 THEN <SELECT QUERY> 
    END <My Column> 
from TABLE; 

Может быть, это будет работать

Смежные вопросы