Boa noite pessoa, estou tentando fazer uma consulta em SQL mas não sei se essa é possivél…
TENHO 3 TABELAS
PESSOA, FORNECEDOR E CIDADE
a tabela PESSOA tem uma chave estrangeira de cidade ja a tabela FORNECEDOR tem uma chave estrangeira de pessoa e outra de cidade.
Gostaria de trazer na consula os dados de pessoa e fornecedor onde as chaves são iguais isso onde isso ja fiz. assim Select p.* FROM pessoa p INNER JOIN p.id_pessoa = f.cod_pessoa. Porem gostaria de trazer tb na mesma consulta as cidades de pessoa e tb a de fornecedor sendo que as cidades das tabelas pessoa e fornecedor são diferentes.
Ate consegui trazer as cidades da tabela pessoa junto na SQL porem não consegui juntar a da fornecedor tb ou seja retornar as cidades da tabela fornecedor atraves da chaves estrangeira.
Tente usar subconsultas para a cidade de um deles(forneces ou pessoa)… seria mais ou menos assim:
SELECT p.nome, c.nome_cidade, f.nome, (SELECT nome_cidade FROM cidade WHERE id=f.id_cidade) as cidade_fornecedor FROM pessoa p INNER JOIN cidade c INNER JOIN fornecedor f WHERE p.id=c.id and p.id=f.id
Se entendi direito o que você precisa creio que também possa ser feito assim, com duas referências de cidade para obter seus resultados distintos:
SELECT f.nome, c.nome_cidade , p.nome, c2.nome_cidade
from fornecedor f
INNER JOIN cidade c on f.id_cidade = c.id
INNER JOIN pessoa p on f.id_pessoa = p.id
INNER JOIN cidade c2 on p.id_cidade = c2.id
consegui retornar os dados do banco com a ajuda de vcs… porem agora eu tentei fazer isso
exemplo
jtxtField.setText(rs.getString(“c.nome_cidade”));
não consegui pois diz que coluna não foi encontrada no resultset… como faço para setar os dados do rs para os campo sendo que não posso utilizar apenas nome_cidade e tenho que informa sempre se é c.nome_cidade ou c2.nome_cidade… alguma ideia???
Já tentou usar ‘aliases’ nos nomes dos campos ?
Exemplo:
PreparedStatement pstmt = conn.prepareStatement("SELECT f.nome as fnome, c.nome_cidade as ccidade, p.nome as pnome, c2.nome_cidade as c2cidade"
+ " from fornecedor f "
+ " INNER JOIN cidade c on f.id_cidade = c.id "
+ "INNER JOIN pessoa p on f.id_pessoa = p.id "
+ "INNER JOIN cidade c2 on p.id_cidade = c2.id ");
ResultSet rs = pstmt.executeQuery();
if (rs.next()) {
System.out.println(rs.getString("fnome"));
System.out.println(rs.getString("ccidade"));
System.out.println(rs.getString("pnome"));
System.out.println(rs.getString("c2cidade"));
}
então tentei sim porem utilizando assim p.* AS p ao nçao deu certo peguei ao invez de informa o nome da coluna informei a posição
no getString(1) por exemplo.