Consulta em várias tabelas.

Alguém pode me auxiliar para como criar uma aplicação consulta em várias tabelas?

monte uma view no banco de dados ou monde o sql voce mesmo fazendo os JOIN’1s

inner join no select

Use o SQL builder que ele faz isso pra você depois você usa o SQL gerado por ele.

Utilizei o gerador de sql do scriptcase, mas não funcionou. O código gerado ficou assim:

SELECT
   custos_preproducao.id_projetos,
   custos_preproducao.descricao,
   custos_preproducao.unidade,
   custos_preproducao.qtde,
   custos_preproducao.vlr_unit,
   custos_preproducao.total,
   custos_preproducao.fonte_financiamento,
   custos_producao.id_projetos,
   custos_producao.descricao,
   custos_producao.unidade,
   custos_producao.qtde,
   custos_producao.vlr_unit,
   custos_producao.total,
   custos_producao.fonte_financiamento,
   custos_posproducao.id_projetos,
   custos_posproducao.descricao,
   custos_posproducao.unidade,
   custos_posproducao.qtde,
   custos_posproducao.vlr_unit,
   custos_posproducao.total,
   custos_posproducao.fonte_financiamento,
   custos_impostos.id_projetos,
   custos_impostos.descricao,
   custos_impostos.unidade,
   custos_impostos.qtde,
   custos_impostos.vlr_unit,
   custos_impostos.total,
   custos_impostos.fonte_financiamento,
   custos_divulgacao.id_projetos,
   custos_divulgacao.descricao,
   custos_divulgacao.unidade,
   custos_divulgacao.qtde,
   custos_divulgacao.vlr_unit,
   custos_divulgacao.total,
   custos_divulgacao.fonte_financiamento,
   custos_administrativos.id_projetos,
   custos_administrativos.descricao,
   custos_administrativos.unidade,
   custos_administrativos.qtde,
   custos_administrativos.vlr_unit,
   custos_administrativos.total,
   custos_administrativos.fonte_financiamento
FROM
   custos_preproducao INNER JOIN custos_producao ON custos_preproducao.id_projetos = custos_producao.id_projetos
   INNER JOIN custos_posproducao ON custos_preproducao.id_projetos = custos_posproducao.id_projetos
   INNER JOIN custos_impostos ON custos_preproducao.id_projetos = custos_impostos.id_projetos
   INNER JOIN custos_divulgacao ON custos_preproducao.id_projetos = custos_divulgacao.id_projetos
   INNER JOIN custos_administrativos ON custos_preproducao.id_projetos = custos_administrativos.id_projetos
WHERE
    id_projetos = '[global_idprojeto]'

O Erro que apareceu foi esse:

ERRO
Erro ao acessar o banco de dados
Column 'id_projetos' in where clause is ambiguous
select count(*) from custos_preproducao INNER JOIN custos_producao ON custos_preproducao.id_projetos = custos_producao.id_projetos INNER JOIN custos_posproducao ON custos_preproducao.id_projetos = custos_posproducao.id_projetos INNER JOIN custos_impostos ON custos_preproducao.id_projetos = custos_impostos.id_projetos INNER JOIN custos_divulgacao ON custos_preproducao.id_projetos = custos_divulgacao.id_projetos INNER JOIN custos_administrativos ON custos_preproducao.id_projetos = custos_administrativos.id_projetos where id_projetos = '1'

Na verdade o que eu quero é o seguinte: Existem 6 tabelas que armazenam custos como preprodução, produção, pósprodução, impostos, administrativos e divulgação de um projeto. Eu já criei consultas individualizadas para cada uma delas totalizando. Mas agora preciso criar uma consulta geral nessas 6 tabelas pra informar o total geral, ou seja, o valor total de todas as etapas de um projeto.

Alguém pode me dizer o que eu errei aí em cima? Ou ainda, tem uma outra forma de fazer o que eu quero?

Qual a versão do seu Mysql?

A versão do meu mysql é 5.5.24.

Acredito que o seu caso a cláusula certa será LEFT JOIN… linkando obviamente com sua tabela de projetos que é a que gera o idprojeto.

Tabela de projetos fica a esquerda e você faz a junção com as demais.

Na verdae eu quero que mostre todos os registros de um determinado “id_projeto” nas 6 tabelas de custos. Preciso fazer select na tabela de projetos? ou só nas de custos?

faça um select na tabela de projetos dando left join nas tabelas de custos

Eu sugeri isso, acho que é o mais certo.

Funcionou, agora tem um problema, os campos foram colocados tudo em sequencia, tentei achar uma forma de colocar eles abaixo um do outro de acordo com as tabelas. Assim:

Tabela custos.preproducao
descricao | unidade | qtde | vlr_unit| total | fonte de financiamento

Abaixo:
Tabela custos.producao
descricao | unidade | qtde | vlr_unit| total | fonte de financiamento

e assim por diante para as demais tabelas. Tem como fazer isso?

Olá

Experimenta trocar o trecho:

WHERE
id_projetos = ‘[global_idprojeto]’

Por:

WHERE
custos_producao.id_projetos = ‘[global_idprojeto]’

Abraço,

Ronaldo Morais

Olá falta o prefixo da tabela no where

Onde está

 where id_projetos = '1'

deve estar

 where custos_producao.id_projetos = '1'

Att.

Já está funcionando, o que eu quero agora é fazer com que os registros das tabelas sejam mostrados um abaixo do outro por tabela. As tabelas tem os mesmos campos. A Consulta tá mostrando os campos/registros de uma tabela e na mesma linha da segunda tabela, e assim por diante. O que eu quero é uma quebra, sempre que terminar os campos de uma tabela, a outra tabela ser mostrada abaixo.