Tengo un problema con una vista que quiero crear. Tengo dos tablas unidas en una combinación externa izquierda, digamos tableA
y tableB
, donde tableB
se deja unir al exterior.SQL where cláusula para la combinación externa izquierda
Quiero seleccionar solo aquellas filas de la tabla B donde el estado es igual a 4, entonces agrego WHERE state = 4
a mi consulta. Ahora el conjunto de resultados se recorta un poco porque todas las filas sin una fila coincidente en tableB
se eliminan del resultado (ya que el estado no es 4 para esas filas). También intenté WHERE state = 4 OR state IS NULL
, tampoco funciona (ya que state
técnicamente no es NULL
cuando no hay estado).
Entonces, ¿qué necesito es una declaración WHERE
que solo se evalúa cuando realmente hay una fila, existe tal cosa?
Si no, veo dos opciones: join (SELECT * FROM tableB WHERE state = 4)
en lugar de la tabla B, o crear una vista con la misma instrucción WHERE
y unir eso en su lugar. ¿Cuál es la mejor opción en cuanto a rendimiento?
Esto es SQL Server 2008 R2 por cierto.
sería interesante tratar de averiguar por qué 'DONDE estado = 4 o un estado null' no funciona, ya que debe evitar que la combinación izquierda de convertirse en un interior unirse. –
@Damien_The_Unbeliever - Le daría todas las filas de TableA no en TableB pero no en las filas donde TableA tiene una coincidencia en TableB donde state <> 4. http://data.stackexchange.com/stackoverflow/qt/110316/ –
@ Damien_The_Unbeliever: hay 3 estados: haciendo coincidir con estado = 4, haciendo coincidir con estado <> 4, no coincide – gbn