Seleção de auto relacionamento
Opa, seguinte, tenho um modelo de tabelas que se auto-relaciona, mas o relacionamento pode vir de qualquer um dos lados, então eu uso uma tabela de ligação, só que quando eu tento selecionar os dados, acontece com frequência uma multiplicidade dos dados. O modelo é semelhante ao seguinte (removendo campos não usados):
CREATE TABLE `usuario` (
`idusuario` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(45) NOT NULL,
PRIMARY KEY (`idusuario`)
);
+-----------+---------+
| idusuario | nome |
+-----------+---------+
| 1 | Ana |
| 2 | Maria |
| 3 | Pedro |
| 4 | Roberta |
| 5 | Carlos |
| 6 | Camila |
| 7 | Marcos |
+-----------+---------+
CREATE TABLE `conhece` (
`primeiro` int(11) NOT NULL,
`segundo` int(11) NOT NULL
);
+----------+---------+
| primeiro | segundo |
+----------+---------+
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 1 | 6 |
| 1 | 7 |
+----------+---------+
O problema é que conforme um usuário aparece mais vezes na tabela 'conhece' alguns relacionamento reaparecem: A seleção que eu faço é a seguinte:
SELECT idusuario,nome FROM conhece c INNER JOIN usuario u ON u.idusuario IN(primeiro,segundo);
+-----------+---------+
| idusuario | nome |
+-----------+---------+
| 1 | Ana |
| 2 | Maria |
| 1 | Ana |
| 3 | Pedro |
| 1 | Ana |
| 4 | Roberta |
| 1 | Ana |
| 5 | Carlos |
| 1 | Ana |
| 6 | Camila |
| 1 | Ana |
| 7 | Marcos |
+-----------+---------+
Basta ver como o usuário 'Ana' reaparece diversas vezes. Queria então saber se alguém sabe alguma maneira eficiente de juntar as tabelas evitando esse problema. Usar o distinct funciona mas vai ficando pesado conforme a quantidade vai aumentando.
Discussão (6)
Carregando comentários...