У меня проблема с представлением, которое я хочу создать. У меня есть две таблицы, соединенные в левое внешнее соединение, скажем 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.