2016-03-29 2 views
-1

Я пытаюсь получить значения из другой таблицы2, если существует совпадение, иначе выберите значение в таблице1, но это займет много времени выполнить запрос.выберите значение из другой таблицы, если запись найдена else, используйте значение в текущей таблице

select table1.field1, table1.field2, 
case 
    when exist (select top 1 
       from table2 
       where table2.field1=table1.field3 
       and table2.field2 is not null 
       order by date desc) 
    then (select top 1 
      from table2 
      where table2.field1=table1.field3 
      and table2.field2 is not null 
      order by date desc) 
    else table1.field3 
end 
from table1 

любой другой способ переписать этот запрос?

, пожалуйста, помогите! . N00b здесь :(

+0

В каком поле вы хотите получить из 'table2' –

ответ

2

Да Использование outer apply:

select t1.field1, t1.field2, coalesce(t2.??, t1.field3) 
from table1 t1 outer apply 
    (select top 1 t2.* 
     from table2 t2 
     where t2.field1= t1.field3 and t2.field2 is not null 
     order by t2.date desc 
    ) t2; 

Неясно, какое поле вы говорите, потому что не хватает от вопроса, следовательно, ??

+0

спасибо, что он прошел определенно намного быстрее! :-) – Queen

0
SELECT t1.field1, t1.field2, coalesce(t2.field2,t1.field3) as field3 
FROM table1 t1 
LEFT JOIN table2 t2 
on t2.field1=t1.field3 
and t2.date = (select max(date) from table2 t2e where t2.field1=t2e.field2) 
0
SELECT 
    table1.field1, 
    table1.field2, 
    COALESCE(table2.field2,table1.field3) 
FROM 
    table1 
LEFT OUTER JOIN 
    table2 
ON 
    table2.field1=table1.field3 
.
  • COALESCE пропускает все нулевые значения в списке.
  • LEFT OUTER JOIN возвращает все значения из первой таблицы, но ставит нулевые значения, когда во второй таблице нет соответствующей строки.
Смежные вопросы