2013-06-26 5 views
0

Как изменить предложение соединения с предложением case; например я хочу таблицу присоединиться еще один столбец, если column1 равно нулю, такие как:SQL-соединение с футляром

SELECT * FROM MYTABLE 
LEFT JOIN OTHERTABLE ON 
CASE WHEN MYTABLE.A IS NULL THEN MYTABLE.B = OTHERTABLE.A 
ELSE MYTABLE.A IS NOT NULL THEN MYTABLE.A = OTHERTABLE.A 

(полностью это выдумал, извините за ошибки синтаксиса :))

+0

ли 'IS NULL' проверить тот, который вы на самом деле пытаетесь решить, или просто пример? - Как вы можете видеть из ответов до сих пор, NULL вообще не нуждается в case case. –

+2

На самом деле это может быть что угодно, так что это не нулевой конкретный. – Sin5k4

+1

Оператор CASE ... END всегда возвращает значение, которое вы можете использовать в объединениях или сравнениях. Вы не можете использовать какие-либо соединения или другие условия внутри оператора CASE. – Arvo

ответ

4

Попробуйте это:

SELECT * 
FROM MyTable M 
LEFT JOIN OtherTable O ON(CASE WHEN M.A IS NULL THEN M.B ELSE M.A END) = O.A 
1
SELECT * FROM MYTABLE 
LEFT JOIN OTHERTABLE ON COALESCE(MYTABLE.A, MYTABLE.B) = OTHERTABLE.A 
+0

Ваш ответ обрабатывает конкретный пример, но не отвечает на реальный вопрос - вопрос заключается в том, чтобы включить инструкцию 'CASE' в' JOIN' –

0

Вы можете использовать isnull() или coalesce() для проверки нулевого значения.

1

Просто попробуйте ниже код:

SELECT * FROM MYTABLE 
LEFT JOIN OTHERTABLE ON OTHERTABLE.A = isnull(MYTABLE.A,MYTABLE.B) 
Смежные вопросы