2013-08-21 2 views
1

Мне нужно объединить две таблицы, используя разные условия для разных наборов строк.Объединить заявление с различными условиями в разных наборах строк

Например, если RowID < 100 on t1.ColA = t2.ColB и если RowID >= 100 on t1.ColA = t2.ColB+1

Я реализовал это, как показано ниже:

... On (RowID <100 and t1.ColA=t2.ColB) OR (RowID >=100 on t1.ColA=t2.ColB+1) ... 

Но это очень и очень медленно, так что это проблема, и что является лучшим решением?

ответ

4
RowID <100 on t1.ColA=t2.ColB 

UNION ALL 

If RowID >=100 on t1.ColA=t2.ColB+1 

Try Это решение.

+0

+1 Как ИЛИ заявление Prolly нарушает его индекс это решение должно добавить его быстро. – YvesR

+0

Очень хорошо. 1s для 200000 записей, Но какова моя проблема с запросом ?! – ARZ

1

Вы можете попробовать это:

On t1.ColA=CASE 
WHEN RowID<100 THEN t2.ColB 
WHEN RowID>=100 THEN t2.ColB+1 
END 

или

SELECT 
... 
CASE 
    WHEN RowID<100 THEN t2.Column 
    WHEN RowID>=100 THEN t3.Column 
END 
... 
Join t2 On t1.ColA=t2.ColB 
Join t2 as t3 On t1.ColA=t3.ColB+1 

может быть, это будет быстрее

+0

такой же выступление. – ARZ

+0

ok, как насчет двух отдельных equi-соединений вместо одного non equi join? Вы попробовали это? –

+0

спасибо @ Andrey, но все же имеет такую ​​же производительность; ( – ARZ

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