Es medio complicado, actualmente tengo un problema similar y la mejor aproximacion a la solucion que logre fue esta:
vencimientos
- fecha
- tipoCliente
- clienteId
clientesArg
- id
- nombre
- domicilio
clientesExt
- id
- nombre
- domicilio
Código MySQL:
Ver originalSELECT v.fecha fecha
, IFNULL(ca.nombre
, ce.nombre
) nombre
, IFNULL(ca.domicilio
, ce.domicilio
) domicilio
LEFT JOIN clientesArg ca
ON (v.tipoCliente
= 1 AND v.clienteId
= ca.id
) LEFT JOIN clientesExt ca
ON (v.tipoCliente
= 2 AND v.clienteId
= ce.id
) -- Para simular el inner join hay que agregar esta condicion:
-- WHERE (ca.id IS NOT NULL XOR ce.id IS NOT NULL)
El problema de esto es que no permite a la base de datos realizar integridad referencial (salvo que se definan triggers) asi que nose si es la alternativa correcta.