Предложение SQL where для левого внешнего соединения

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

Я хочу выбрать только те строки из таблицы B, где состояние равно 4, поэтому я добавляю WHERE state = 4 в свой запрос. Теперь набор результатов немного урезан, потому что все строки без соответствующей строки в tableB удаляются из результата (поскольку состояние не равно 4 для этих строк). Я также пробовал WHERE state = 4 OR state IS NULL , тоже не работает (поскольку state технически не NULL , когда состояния нет).

Итак, мне нужен оператор WHERE , который оценивается только тогда, когда на самом деле есть строка, существует ли такая вещь?

Если нет, я вижу два варианта: присоединиться (SELECT * FROM tableB WHERE state = 4) вместо таблицы B или создать представление с тем же оператором WHERE и присоединиться к нему вместо. Какой лучший вариант с точки зрения производительности?

Это, кстати, SQL Server 2008 R2.

6
задан marc_s 24 August 2011 в 07:57
поделиться