BUenos días, mi consulta es la siguiente:
Tengo una tabla con la siguiente estructura
nmrofctra: id de la factura
cdgovrble: código de cada variable que hace parte de la factura
vlorvrble: valor de la variable
Un ejemplo de cómo se guarda la información UNA FACTURA sería:
nmrofctra cdgovrble vlorvrble
20063 nmbreclnte juan eduardo
20063 paplldo perez
20063 saplldo gonzalez
20063 drccion calle 30 no 50 - 98
20063 tlfono 3555555
20063 estdocvil soltero
20063 emprsa todo diesel ltda
20063 prsnasacrgo 2
De tal forma que tantas variables conformen una factura, tantas filas tendrá dicha factura en la tabla. Se hizo de esta manera más que todo por el dinamismo de la tabla, por no tener todas las columnas claras desde el principio y más que todo porque el cliente añadió más columnas de las contempladas desde un comienzo. Con esta estructura de tabla se pueden añadir todas la variables necesarias sin comprometer estructura de tabal y otros módulos que dependen de ésta.
El enredo está cuando por ejemplo me piden un listado con todas las facturas y las siguientes variables: estdocvil,emprsa,prsnasacrgo. Todo está muy bien si TODAS las facturas tienen esa variable, pero en el caso que prsnasacrgo NO SEA OBLIGATORIA entonces esa factura no tendrá ese registro, ni siquiera el nombre de la variable, algo así:
nmrofctra cdgovrble vlorvrble
20064 nmbreclnte elvira
20064 paplldo mogolla
20064 saplldo linero
20064 drccion calle 50 no 150 - 9
20064 tlfono 3888888
20064 estdocvil casada
20064 emprsa microsoft
Está claro que para hallar las tres variables necesito cruzar la misma tabla 3 veces, pero en caso que alguna fatura no tenga alguna de las variables (así como se muestra en el ejemplo) no se tendrá en cuenta en el cruce y quedará por fuera de mi listado. La mejor solución que encontré fue utilizar el LEFT OUTER JOIN, teniendo como primer resultado el listado de facturas que cumplen con cierto criterio necesario y además obligatorio para todas.
La pregunta es, cómo hago TRES veces el left outer join??? Quién me podría ayudar con un ejemplo???
Muchas, muchas gracias.