2015-08-06 3 views
0

У меня есть SQL запрос следующим образом:Использование ДЕЛУ в запросе SQL

SELECT * 
FROM table1 
INNER JOIN table2 ON table1.key = table2.key 
INNER JOIN table3 ON table1.var = table3.var 
INNER JOIN table4 ON table1.field = table4.field 

, но я только хочу, чтобы включить Таблицу 3 присоединиться, если переменная имеет определенное значение (iMarket = 250 и выше)

Я пытаюсь получить такого рода условия работы:

SELECT * 
FROM table1 
INNER JOIN table2 ON table1.key = table2.key 
CASE 
    WHEN iMarket > 250 
    THEN INNER JOIN table3 ON table1.var = table3.var 
END 
INNER JOIN table4 on table1.field = table4.field 

это псевдо-код, но он приближается к тому, что я пытаюсь сделать. Ничего не работает. Есть ли более простой способ сделать это? Я хочу исключить это объединение, потому что он всегда терпит неудачу, если эта переменная ниже определенного значения. Спасибо вам всем!

+2

Оператор CASE в SQL может возвращать только значение. Он не может направлять управление потоком. –

+0

Фактически, 'CASE' в T-SQL является ** выражением ** - не является оператором - и выражение может быть оценено только одним (возможно, многими возможными) значениями - его нельзя использовать для условных объединений. .. –

ответ

3

Как легко включить условие в присоединиться on дизъюнкцию:

SELECT * from table1 
INNER JOIN table2 on table1.key=table2.key 
INNER JOIN table3 on iMarket>250 and table1.var=table3.var 
INNER JOIN table4 on table1.field=table4.field 

Помните, чем вы должны использовать внешние соединения, если вам нужны все значения из других таблиц, несмотря на то, что они не являются ни одного совпадения для table3, возможно, вы ищете такое поведение:

SELECT * from table1 
INNER JOIN table2 on table1.key=table2.key 
INNER JOIN table4 on table1.field=table4.field 
left outer join --<-- 
      table3 on iMarket>250 and table1.var=table3.var 
+0

Спасибо всем - вы были очень полезны! – Bernard

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