Instrucao sql

4 respostas
M

Pessoal,

Tenho duas tabelas uma “equipamento” outra “hardware” na equipamento existem os campos:

descri, dataentrada, descricao e id

e na hardware

id e peca

eu preciso mostrar todas as pecas cadastradas para o mesmo id eu tentei fazer dessa maneira

select equipamento.id, equipamento.descri, equipamento.dataent, equipamento.datasai, equipamento.emuso, hardware.descricao from equipamento inner join hardware on equipamento.id=hardware.id;

mas dessa maneira mostra muitas linhas para o mesmo equipamento…alguem tem alguma dica para mostrar suponhamos

id = 1
peca = tal
peca = tal



Obrigado

4 Respostas

L

Tenta com um distinct

M

eu nao sei se estou usando todos os recursos do distinct mas da maneira q sei usar nao eh suficiente.

imagine uma tabela com dois campos nome, nota com os seguintes dados

jose, 5

jose, 6

jose, 7

jose, 7

com a instrucao

SELECT DISTINCT nome, nota FROM TABELA;

eu teria:

jose, 5
jose, 6
jose, 7

certo porque os retornos seriam distintos somente o quarto que seria igual, o que eu preciso seria um retorno

jose 5,6,7,7

acho q ta meio confuso…mas eh isso se alguem puder dar umas dicas…eu agradeco

Ate mais…!

S

Quando você junta duas ou mais tabelas numa consulta, está criando o produto cartesiano das duas, daí o motívo de aparecer José para cada ocorrência da coluna numérica (no seu exemplo)

A cláusula distinct em nada ajuda nete caso. Só funciona para casos em que a consulta apresentasse diversas linhas com TODAS colunas iguais, como, por exemplo,

select uf from cidades;

Se todas cidades do Brasil estão cadastradas na tabela cidade, a consulta acima retornaria >4000 linhas, enquanto que

select distinct uf from cidades;

retornará apenas uma linha por estado!

Como você tem uma hierarquia entre equipamentos e hardware, uma maneira de resolver seu problema é usar duas consultas aninhadas dentro de alguma lógica, como:

ResultSet  equip = stmt.executeQuery("select * from equipamentos");

System.out.println( equip.toString("descri") + "...." );          

While (equip.next() {
    ResultSet hw = stmt.executeQuery("select descricao from hardware where hardware.id = " + equip.id);
    while hw.next() {
        System.out.println( "    " + hw.toString(1) );
    }          
}

Isso, claro, é só uma maneira de apresentar. Se for numa Jtable, basta adaptar para criar as células no lugar dos println!

M

Valeu pelas dicas estou mesmo usando logica para resolver essa questao… mas nao teria uma instrucao sql para resolver isso?..eu nao trabalho muito com bancos por isso meu conhecimento eh meio superficial…aproveitando alguem conhece sites com bons tutoriais sobre sql para eu aprofundar meus conhecimentos…

Ate mais!!!

Criado 5 de novembro de 2004
Ultima resposta 6 de nov. de 2004
Respostas 4
Participantes 3