Boa noite.
Estou com uma dificuldade de relacionamento no Access.
Eu tenho uma tabela ENTREVISTADO com campos codEntrevistado, nome, sexo, nomeConjuge, sexoConjuge, transporte (há outros campos mas estou citando aqui só os que interessam).
Tenho uma outra tabela SEXO com os campos CodSexo, NomeSexo;
E Também uma TRANSPORTE com CodTransporte, Tipo.
Ao fazer o relacionamento entre as tabelas relaciono o campo Entrevistado.sexo->Sexo.id; Quando eu faço o mesmo para o campo sexoConjuge o Access cria o desenho de uma outra tabela Sexo, de forma que fica: Sexo_1.
Até aí não tem problema, fiz o formulário e os dados estão sendo inseridos normalmente.
Só que quando tento fazer uma consulta de, por exemplo, quantos entrevistados no sexo feminino possuem carro no modo Design da consulta, não obtenho resultado.
Percebi que, talvez por causa de como essas relações foram feitas, o SQL da consulta faz um INNER JOIN automático para cada campo relacionado às tabelas SEXO e TRANSPORTE.
por exemplo:
SELECT Count(Entrevistado.CodEntrevistado) AS ContarDeCodEntrevistado, Sexo.NomeSexo, Transporte.Tipo
FROM Transporte INNER JOIN (Sexo INNER JOIN Entrevistado ON (Sexo.CodSexo = Entrevistado.SexoConj) AND (Sexo.CodSexo = Entrevistado.Sexo)) ON (Transporte.CodTransporte = Entrevistado.Transporte) AND (Transporte.CodTransporte = Entrevistado.TransporteEscola)
GROUP BY Sexo.NomeSexo, Transporte.Tipo
HAVING (((Sexo.NomeSexo)="feminino") AND ((Transporte.Tipo)="carro"));
este é o código automático que o Design gera. Percebam que tem um "INNER JOIN Entrevistado ON (Sexo.CodSexo = Entrevistado.SexoConj)" sendo que neste momento eu não quero usar sexo do cônjuge na minha pesquisa. O mesmo acontece para Transporte, pois tenho 2 campos em Entrevistado ligados à tabela Transporte)
Então, quando eu retiro esses INNER JOIN excedentes, fica assim:
SELECT Count(Entrevistado.CodEntrevistado) AS QTD, Sexo.NomeSexo, Transporte.Tipo
FROM Transporte INNER JOIN (Sexo INNER JOIN Entrevistado ON (Sexo.CodSexo = Entrevistado.Sexo)) ON (Transporte.CodTransporte = Entrevistado.Transporte)
GROUP BY Sexo.NomeSexo, Transporte.Tipo
HAVING (((Sexo.NomeSexo)="Feminino") AND ((Transporte.Tipo)="carro"));
E desse jeito funciona.
A questão é:
Estou fazendo relacionamento errado? Existe um jeito mais prático de eu fazer essa consulta pelo Design sem precisar ir alterar o código manualmente?
Estou com uma dificuldade de relacionamento no Access.
Eu tenho uma tabela ENTREVISTADO com campos codEntrevistado, nome, sexo, nomeConjuge, sexoConjuge, transporte (há outros campos mas estou citando aqui só os que interessam).
Tenho uma outra tabela SEXO com os campos CodSexo, NomeSexo;
E Também uma TRANSPORTE com CodTransporte, Tipo.
Ao fazer o relacionamento entre as tabelas relaciono o campo Entrevistado.sexo->Sexo.id; Quando eu faço o mesmo para o campo sexoConjuge o Access cria o desenho de uma outra tabela Sexo, de forma que fica: Sexo_1.
Até aí não tem problema, fiz o formulário e os dados estão sendo inseridos normalmente.
Só que quando tento fazer uma consulta de, por exemplo, quantos entrevistados no sexo feminino possuem carro no modo Design da consulta, não obtenho resultado.
Percebi que, talvez por causa de como essas relações foram feitas, o SQL da consulta faz um INNER JOIN automático para cada campo relacionado às tabelas SEXO e TRANSPORTE.
por exemplo:
SELECT Count(Entrevistado.CodEntrevistado) AS ContarDeCodEntrevistado, Sexo.NomeSexo, Transporte.Tipo
FROM Transporte INNER JOIN (Sexo INNER JOIN Entrevistado ON (Sexo.CodSexo = Entrevistado.SexoConj) AND (Sexo.CodSexo = Entrevistado.Sexo)) ON (Transporte.CodTransporte = Entrevistado.Transporte) AND (Transporte.CodTransporte = Entrevistado.TransporteEscola)
GROUP BY Sexo.NomeSexo, Transporte.Tipo
HAVING (((Sexo.NomeSexo)="feminino") AND ((Transporte.Tipo)="carro"));
este é o código automático que o Design gera. Percebam que tem um "INNER JOIN Entrevistado ON (Sexo.CodSexo = Entrevistado.SexoConj)" sendo que neste momento eu não quero usar sexo do cônjuge na minha pesquisa. O mesmo acontece para Transporte, pois tenho 2 campos em Entrevistado ligados à tabela Transporte)
Então, quando eu retiro esses INNER JOIN excedentes, fica assim:
SELECT Count(Entrevistado.CodEntrevistado) AS QTD, Sexo.NomeSexo, Transporte.Tipo
FROM Transporte INNER JOIN (Sexo INNER JOIN Entrevistado ON (Sexo.CodSexo = Entrevistado.Sexo)) ON (Transporte.CodTransporte = Entrevistado.Transporte)
GROUP BY Sexo.NomeSexo, Transporte.Tipo
HAVING (((Sexo.NomeSexo)="Feminino") AND ((Transporte.Tipo)="carro"));
E desse jeito funciona.
A questão é:
Estou fazendo relacionamento errado? Existe um jeito mais prático de eu fazer essa consulta pelo Design sem precisar ir alterar o código manualmente?