Left join retornando apenas uma linha
Olá pessoal. Tudo bem?
Bom.. tenho as seguintes tabelas:
mysql> select * from empresas;
+----+-------+-----------+-------+------------+----------------+
| id | tipo | logotipo | nome | grupo | cnpj |
+----+-------+-----------+-------+------------+----------------+
| 8 | Lazer | troll.jpg | Teste | Pespi Cola | 99999313412312 |
+----+-------+-----------+-------+------------+----------------+
mysql> select * from empresas_contatos;
+----+---------+------------+--------------+------------+
| id | empresa | rotulo | email | telefone |
+----+---------+------------+--------------+------------+
| 1 | 8 | Principal | x@xxx.co.co | 5112121212 |
| 2 | 8 | Financeiro | fin@y.net | 5012121212 |
+----+---------+------------+--------------+------------+
E gostaria de recuperar ambas simultaneamente utilizando LEFT JOIN:
mysql> select `e`.`nome`, `e`.`grupo`, `c`.* from `empresas` `e`
-> left join `empresas_contatos` `c` on
-> `c` . `empresa` = `e` . `id`;
+-------+------------+------+---------+------------+-------------+------------+
| nome | grupo | id | empresa | rotulo | email | telefone |
+-------+------------+------+---------+------------+-------------+------------+
| Teste | Pespi Cola | 1 | 8 | Principal | x@xxx.co.co | 5112121212 |
| Teste | Pespi Cola | 2 | 8 | Financeiro | fin@y.net | 5012121212 |
+-------+------------+------+---------+------------+-------------+------------+
O problema é o seguinte: Há dados sendo recuperados que são desnecessários. Minha tabela é bem maior que o exemplo acima, e se a empresa tiver 2 contatos (email/telefone) e 2 endereços (é outra tabela, que não postei por ser desnecessário), significa que vou recuperar 4 linhas: todas com o mesmo "nome", "grupo", "logotipo", "empresa", etc.
No exemplo acima, a empresa de id 8 tinha 2 contatos e por isso o mysql retornou duas linhas, cada uma para um contato da empresa, porém com os dados da empresa repetidos. Eu sei que é o comportamento normal, mas quero evitar isso, da seguinte forma:
A cada coluna do contato que ele recuperar, adicionar um index no final, exemplo: email1, email2, telefone1, telefone2, e dessa forma recuperar somente uma linha.
Por exemplo: tendo como base a consulta acima, gostaria de retornar somente UMA linha, com as seguintes colunas: nome, grupo, id1, id2, empresa1, empresa2, rotulo1, rotulo2, email1, email2, telefone1, telefone2.
E caso houvesse mais um contato, existiria um email3, telefone3, etc.
Talvez eu esteja complicando o simples, mas fiquei curioso com essa situação e gostaria de solucionar.
Abraço!
Discussão (1)
Carregando comentários...