Dúvida sobre fazer dois left join na mesma querry
Bom dia,
Tenho uma base de dados que não é normalizada e possui muitos problemas que tenho que tratar no where. Basicamente o que quero fazer é uma view de algumas tabelas. O primeiro código que eu fiz é o seguinte:
SELECT
GSI_PROYECTOS.ID_PROYECTO,
GSI_PROYECTOS.NOMBRE AS NOMBRE_PREVENTA,
GSI_PROYECTOS.ID_REGION_PAIS,
GSI_REGIONES_PAISES.NOMBRE_REGION,
GSI_REGIONES_PAISES.ID_CLUSTER,
GSI_CLUSTERS.NOMBRE AS NOMBRE_CLUSTER,
GSI_PROYECTOS.ID_PAIS,
GSI_PAISES.NOMBRE_PAIS,
GSI_PROYECTOS.ID_CIUDAD,
GSI_CIUDADES.NOMBRE_CIUDAD,
GSI_PROYECTOS.ID_IDIOMA_PROYECTO,
GSI_IDIOMAS.DESCRIPCION,
GSI_PROYECTOS.ID_CLIENTE,
GSI_CLIENTES.NOMBRE_CLIENTE,
GSI_PROYECTOS.ID_TIPO_PROYECTO,
GSI_TIPOS_PROYECTO.NOMBRE_TIPO,
GSI_PROYECTOS.ID_ESTADO_GOAL,
GSI_ESTADOS_GOAL.NOMBRE_ESTADO,
GSI_PROYECTOS.ID_PRODUCTO,
GSI_PRODUCTOS.NOMBRE_PRODUCTO,
GSI_PRODUCTOS.ID_HERRAMIENTA,
GSI_HERRAMIENTAS.NOMBRE_HERRAMIENTA,
GSI_PROYECTOS.ID_SECTOR,
GSI_SECTORES.NOMBRE_SECTOR,
GSI_PROYECTOS.ID_RESP_PROYECTOS,
GSI_PROYECTOS.FECHA_INI,
GSI_PROYECTOS.FECHA_CREACION,
GSI_PROYECTOS.FECHA_FIRMA_PREVISTA,
GSI_PROYECTOS.FECHA_FIN,
GSI_PROYECTOS.ID_EMPRESA_GOAL,
GSI_EMPRESA_GOAL.NOMBRE_EMPRESA,
GSI_PROYECTOS.GESTOR_CUENTA,
GSI_PROYECTOS.FINANCIADO,
GSI_PROYECTOS.DEFAULT_PROYECT,
GSI_PROYECTOS.ES_PROY_PADRE,
GSI_PROYECTOS.OBSERVACIONES,
GSI_PROYECTOS.DURACION_PREVISTA,
GSI_PROYECTOS.PORCENTAJE_EXITO,
GSI_PROYECTOS.ID_PARTNER,
GSI_PROYECTOS.ESFUERZO_PREVISTO,
GSI_PROYECTOS.OFERTADO,
GSI_PROYECTOS.ID_DIVISA,
GSI_DIVISAS.NOMBRE,
GSI_DIVISAS.CODIGO_ISO,
GSI_DIVISAS.VALOR_CONVERSION,
GSI_PROYECTOS.OTROS_GASTOS,
GSI_PROYECTOS.ESTIMACION_DE_COSTE,
GSI_PROYECTOS.DURACION_ALQUILER,
GSI_PROYECTOS.ALQUILER_FACTURADO,
GSI_PROYECTOS.FACT_IMP_PREV,
GSI_PROYECTOS.FACT_LIC_PREV,
GSI_PROYECTOS.FACT_MANT_PREV,
GSI_PROYECTOS.FACT_ADAP_PREV,
GSI_PROYECTOS.FACT_LIC_DIV,
GSI_PROYECTOS.FACT_IMP_DIV,
GSI_PROYECTOS.FACT_MANT_DIV,
GSI_PROYECTOS.FACT_ADAP_DIV,
GSI_PROYECTOS.FACTURACION_PREVISTA,
GSI_PROYECTOS.MOTIVO_CAMBIO
FROM
GSI_PROYECTOS,
GSI_REGIONES_PAISES,
GSI_CLUSTERS,
GSI_PAISES,
GSI_CIUDADES,
GSI_IDIOMAS,
GSI_CLIENTES,
GSI_TIPOS_PROYECTO,
GSI_ESTADOS_GOAL,
GSI_PRODUCTOS,
GSI_HERRAMIENTAS,
GSI_SECTORES,
GSI_EMPRESA_GOAL,
GSI_DIVISAS
WHERE
GSI_PROYECTOS.ID_TIPO_PROYECTO = 3 AND
GSI_PROYECTOS.ID_REGION_PAIS = GSI_REGIONES_PAISES.ID_REGION AND
GSI_REGIONES_PAISES.ID_CLUSTER = GSI_CLUSTERS.ID_CLUSTER AND
GSI_PROYECTOS.ID_PAIS = GSI_PAISES.ID_PAIS AND
GSI_PROYECTOS.ID_CIUDAD = GSI_CIUDADES.ID_CIUDAD AND
GSI_PROYECTOS.ID_IDIOMA_PROYECTO = GSI_IDIOMAS.ID_IDIOMA AND
GSI_PROYECTOS.ID_CLIENTE = GSI_CLIENTES.ID_CLIENTE AND
GSI_PROYECTOS.ID_TIPO_PROYECTO = GSI_TIPOS_PROYECTO.ID_TIPO_PROYECTO AND
GSI_PROYECTOS.ID_ESTADO_GOAL = GSI_ESTADOS_GOAL.ID_ESTADO_GOAL AND
GSI_PROYECTOS.ID_PRODUCTO = GSI_PRODUCTOS.ID_PRODUCTO AND
GSI_PRODUCTOS.ID_HERRAMIENTA = GSI_HERRAMIENTAS.ID_HERRAMIENTA AND
GSI_PROYECTOS.ID_SECTOR = GSI_SECTORES.ID_SECTOR AND
GSI_PROYECTOS.ID_EMPRESA_GOAL = GSI_EMPRESA_GOAL.ID_EMPRESA_GOAL AND
GSI_PROYECTOS.ID_DIVISA = GSI_DIVISAS.ID_DIVISA
Mas eu descobri que na tabela principal GSI_PROYECTOS possui muitos codigos como exemplos(ID_REGION, ID_PAIS, ETC) estão preenchidos com nulo, portanto o where não funciona muito bem. Deste modo alterei o where para retornar as linhas mesmo que o valor seja nulo:
SELECT B.ID_PROYECTO,
B.NOMBRE AS NOMBRE_PREVENTA,
B.ID_REGION,
B.NOMBRE_REGION,
B.ID_PAIS,
B.ID_IDIOMA_PROYECTO,
B.ID_CLIENTE,
B.ID_CIUDAD,
B.ID_TIPO_PROYECTO,
B.ID_ESTADO_GOAL,
B.ID_PRODUCTO,
B.ID_SECTOR,
B.ID_RESP_PROYECTOS,
B.FECHA_INI,
B.FECHA_CREACION,
B.FECHA_FIRMA_PREVISTA,
B.FECHA_FIN,
B.ID_EMPRESA_GOAL,
B.GESTOR_CUENTA,
B.FINANCIADO,
B.ES_PROY_PADRE,
B.OBSERVACIONES,
B.DURACION_PREVISTA,
B.PORCENTAJE_EXITO,
B.ID_PARTNER,
B.ESFUERZO_PREVISTO,
B.OFERTADO,
B.ID_DIVISA,
B.ESTIMACION_DE_COSTE,
B.MOTIVO_CAMBIO
FROM (
SELECT* FROM(
SELECT PR1.ID_PROYECTO,PR1.NOMBRE,PR1.ID_REGION,PR1.ID_PAIS,PR1.ID_CIUDAD,PR1.ID_IDIOMA_PROYECTO,PR1.ID_CLIENTE,
PR1.ID_TIPO_PROYECTO,PR1.ID_ESTADO_GOAL,PR1.ID_PRODUCTO,PR1.ID_SECTOR,PR1.ID_RESP_PROYECTOS,
PR1.FECHA_INI,PR1.FECHA_CREACION,PR1.FECHA_FIRMA_PREVISTA,PR1.FECHA_FIN,PR1.ID_EMPRESA_GOAL,PR1.GESTOR_CUENTA,
PR1.FINANCIADO,PR1.ES_PROY_PADRE,PR1.OBSERVACIONES,PR1.DURACION_PREVISTA,
PR1.PORCENTAJE_EXITO,PR1.ID_PARTNER,PR1.ESFUERZO_PREVISTO,PR1.OFERTADO,PR1.ID_DIVISA,PR1.ESTIMACION_DE_COSTE,
PR1.MOTIVO_CAMBIO,CI.NOMBRE_CIUDADFROM (
SELECT *
FROM GSI_PROYECTOS
WHERE GSI_PROYECTOS.ID_TIPO_PROYECTO = 3
) PR1
LEFT JOIN GSI_CIUDADES CI
ON PR1.ID_CIUDAD = CI.ID_CIUDAD
) A
LEFT JOIN(
SELECT R.NOMBRE_REGION,R.ID_REGION FROM
GSI_REGIONES_PAISES R
)RE
ON A.ID_REGION = RE.ID_REGION)B
Mas agora estou com problema na comparação do campo ID_REGION pois ele esta nos dois LEFT JOIN. Alguem poderia me ajuda?
Discussão (4)
Carregando comentários...