2016-10-21 3 views
2

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

Пример: таблица1:

ID code itemsequence 
0001 1  1 
0001 1  2 
0001 2  1 
0001 2  2 
0001 3  1 
0002 null 1 

таблица 2:

ID code outcomeID sequence itemsequence 
0001 1  0001  1    1 
0001 1  0004  4    2 
0001 2  0002  2    1 
0001 2  0005  5    2 
0001 3  0003  3    1 
0002 null 0001  1    1 

Когда я ниже выбрать, я получаю 6 строк, но имеет t2.sequence что значение NULL для ID == 002. это правильно

select * from table1 t1 
    LEFT join table2 t2 
    on t2.Id=t1.ID and t1.itemsequence=t2.itemsequence and t2.code=t1.code 

, но я хотел бы иметь значение последовательности, несмотря на условие f . беспокоит Я хочу это значение последовательности для соответствующего идентификатора для дальнейших вычислений в моем проекте. Можем ли мы это сделать? любая помощь приветствуется!

ответ

2

Вы можете использовать ISNULL

Заменяет NULL с указанным значением замены.

and ISNULL(t2.code,-1)=ISNULL(t1.code,-1) 

Или COALESCE

Оценивает аргументы в порядке и возвращает текущее значение первого выражения, которое первоначально не принимает значение NULL.

and COALESCE(t2.code,-1)=COALESCE(t1.code,-1) 

Чтобы решить эту проблему.

ПРИМЕЧАНИЕ: Оба оператора изменят NULL на -1, чтобы вы могли выполнить надлежащее соединение. Если у вас есть несколько столбцов с одинаковыми ID с NULL в code, это будет эффект CROSS JOIN на этих строках.

+0

спасибо !! это сработает. – chits

+0

Мое удовольствие! ;) – gofr1

1

Или вы можете добавить еще одно условие для NULL значений t2.code IS NULL AND t1.code IS NULL

AND t1.itemsequence=t2.itemsequence AND 
    (t2.code = t1.code OR (t2.code IS NULL AND t1.code IS NULL)) 
Смежные вопросы