Cita:
Empezado por Cabanyaler
Si es cierto que quiero todos los contratos, independientemente de si tiene cliente o si teniendo cliente independientemente de si este a su vez tiene teléfono etc. Pero, ¿de eso no se encarga precisamente el LEFT INNER JOIN?, de retornar todos los contratos tengan o no cliente o todos los clientes con contrato tengan o no teléfono, y si lo tienen aplicarles las clausulas WHERE?
|
¿left
inner join?. No lo creo. Será un left
outer join
.
Efectivamente, el left outer join se encarga de traer todos los contratos, independientemente de si tienen cliente o no. Podes comprobarlo quitando de la clausula where todo lo que haga referencia a campos de la tabla cliente o teléfono.
El problema se da precisamente cuando NO hay un cliente, pues tu clausula where se encarga de filtrar TODOS estos registros, pues no prevee ninguna condición que los deje pasar.
Dado que el left join devolverá null para todos los campos de la tabla cliente cuando no exista un registro asociado a esta, lo usual es incluir en el where los correspondientes "or's" para que deje "pasar" estos registros, algo como:
Código SQL
[-]
select f.*, c.*
from factura f
left outer join cliente c on c.idcliente = f.id_cliente
where (c.ciudad = 'GUATEMALA' OR c.ciudad is null)
and (c.apellido like '%CASTILLO%' or c.apellido is null);
Esto devolverá todas las facturas para clientes con apellido CASTILLO de la ciudad de guatemala y todas aquellas que no tengan asociado un cliente.
Hasta luego.