Esa es la consulta base, pero no es la solución.
Para poder desplegar horizontalmente los teléfonos de cada cliente en una columna separada, tienes que agregar un INNER JOIN
por cada teléfono adicional que haya, tomando como referencia la cantidad de telefonos que tenga el cliente con mayor cantidad de ellos.
¿Se entiende bien?
Esto quiere decir que si tienes dos teléfonos en un cliente, pones dos INNER JOIN:
Código SQL:
Ver originalSELECT
cl.cli_id,
cl.cli_nombre,
cl.cli_ciudad,
cl.cli_direccion,
tl1.telefono telefono1,
tl2.telefono telefono2,
cl.cli_email
FROM tbl_clientes cl
INNER JOIN tbl_telefonos tl1 ON cl.cli_id=tl1.cli_id
LEFT JOIN tbl_telefonos tl2 ON cl.cli_id=tl2.cli_id
WHERE tl2.telefono IS NULL OR tl1.telefono = tl2.telefono
;
El problema es si se presenta algún caso donde haya más, por ejemplo cinco (5) teléfonos. Eso lo complica, dado que tendrás que cubrir todas las combinaciones de relaciones entre las tablas posibles, de modo que no se repitan los clientes, sino solamente devuelva teléfonos diferentes del mismo, o nulos.
La verdad es que salvo que haya una necesidad
absoluta e imposible de cubrir pragmáticamente, para crear este tipo de consultas, no es recomendable bajo ninguna circunstancia.
En mi experiencia, en las aplicaciones empresariales, cuando se tiene que recuperar una cantidad variable de items relacionados a un cliente dado, NUNCA se hace en la misma query donde se obtienen los datos del cliente, sino en una query separada. Los resultados se integran el la aplicación, y no en la consulta.