Problema no relacionamento de tabelas

Boa noite galera, estou fazendo um sistema de consumo, que contem comanda final, na qual a pessoa insere o código do cliente, e vai traze a lista de gastos dele…só que estou com um problema, pra puxar essa lista estou fazendo um relacionamento com mais de 2 tabelas, até então funciona, o problema é q se insiro um novo cadastro de cliente, e não consumo nada vou nessa tabela de gastos e ele me traz os dados do cliente 1 por exemplo…ou seja, todos os clientes que eu cadastro daqui pra frente mesmo sem consumir nada estão ficando com os valores duplicados, baseado no consumo do primeiro cliente. Será que alguém pode me ajudar, estou completamente perdido

Segue abaixo meu código:

  boolean consulta=true;
        
        Connection conn = null;
        String url = "jdbc:mysql://localhost:3306/";
        String dbName = "test";
        String driver = "com.mysql.jdbc.Driver";
        
        
        try{ //tratamento de erros
            
            Class.forName(driver);
            conn =    (Connection) DriverManager.getConnection(url+dbName,"root","");
            
            
            Statement stmt = (Statement) conn.createStatement();
            
             if ("".equals(jTextField1.getText()))
            {
                JOptionPane.showMessageDialog(this,"Insira o código para efetuar a pesquisa!");          
                stmt.close();
            }
            
            int id = Integer.parseInt(jTextField1.getText());
            ResultSet RS = stmt.executeQuery("SELECT clientes.nome,karts.valor_aluguel,pista.preco,aluguel.preco_barracao FROM clientes INNER JOIN karts,pista,aluguel where clientes.id =' " + id + " ' ");
            
            while (RS.next()){

                jTextField2.setText(RS.getString("nome"));
                jLabel6.setText(RS.getString("valor_aluguel"));
                jLabel11.setText(RS.getString("preco"));
                jLabel9.setText(RS.getString("preco_barracao"));
   
                 
                consulta=false;
                
                JOptionPane.showMessageDialog(this,"Dados Encontrados!");
                
            }
            
            if (consulta) JOptionPane.showMessageDialog(this,"Dados Não Encontrados!");
            
            RS.close();
            
            stmt.close();
            
            conn.close(); //fecha conexão com BD
            
        }catch (ClassNotFoundException ex) {
            
            Logger.getLogger(TCadastroCliente.class.getName()).log(Level.SEVERE, null, ex);
            
        }catch(SQLException e){ //trata os erros
            
        }

    

Faltam as condições de JOIN das tabelas

Que condições são essas? Poderia me dar um exemplo por favor?

http://www.sql-tutorial.com/sql-join-sql-tutorial/
http://www.luis.blog.br/join-ou-juncoes-sql-inner-left-right-e-full-outer-join.aspx

comece por entender os SQL Joins e tente corrigir sua consulta.

se ainda tiver dúvidas ou problemas, volte aqui e pergunte.

Boa noite galera

Obrigado pela ajuda…entao consegui resolver por partes…já não está mais ocorrendo aquela duplicação de dados, mas por exemplo se eu excluo um consumo da lista e vou fazer uma nova consulta me traz uma lista vazia, como se tudo tivesse sido deletado

SELECT clientes.nome,karts.valor_aluguel,pista.preco, aluguel.preco_barracao from clientes clientes INNER JOIN karts karts ON clientes.id = karts.id INNER JOIN pista pista ON clientes.id = pista.id INNER JOIN aluguel aluguel ON clientes.id = aluguel.id WHERE clientes.id = 1;

já no código abaixo persiste a duplicação de valores, ao cadastrar um cliente, ele já vem com produtos consumidos, semelhantes ao do cliente 1


SELECT clientes.nome,shopping.precot,shopping.produtot,shopping.total FROM clientes INNER JOIN shopping ON clientes.id where clientes.id =2;

está assim meus selects…se alguém souber o motivo por favor me ajude

OK, continue com o código que voce utiliza o JOIN e depois coloca os “ON”… o caminho é esse mesmo, porém voce precisa entender a diferença entre os tipos de JOINS.

no seu caso, eu usuaria o LEFT OUTER JOIN

quando voce usa o INNER JOIN, voce assume que todas as ligaçoes haverão registros… e caso não tenha… nada vai aparecer.

já no LEFT OUTER JOIN, ele aparece assim mesmo, porém vai completar com NULL os campos sem registro

acho que seu modelo não está correto.

o cliente aluga um kart, um barracao e uma pista (supondo que há mais de uma). alguma entidade deve fazer a ligação desses caras. por exemplo, uma entidade chamada aluguel.

create table aluguel ( cliente_id ... , kart_id ... , pista_id ... , barracao_id ... , data_aluguel ... , quatidade_horas ... , primary key (cliente_id, kart_id, pista_id, barracao_id, data_aluguel) -- supondo que o cliente sempre alugará um kart, uma pista e um barracao )

e a consulta:

select cliente.nome , kart.numero , (kart.valor * aluguel.quantidade_horas) valor_aluguel_kart , pista.nome , (pista.valor * aluguel.quantidade_horas) valor_aluguel_pista , barracao.numero , (barracao.valor * aluguel.quantidade_horas) valor_aluguel_barracao from aluguel join cliente on aluguel.cliente_id = cliente.id join kart on aluguel.ksrt_id = kart.id join pista on aluguel.pista_id = pista.id join barracao on aluguel.barracao_id = barracao.id where cliente.id = ?

Bom dia galera…segui o conselho de vocês, fiz com left outer join mas o resultado foi o mesmo, ele traz dados de consumo para o id de um cliente que não consumiu nada

SELECT clientes.nome,shopping.precot,shopping.produtot,shopping.total FROM clientes INNER JOIN shopping ON clientes.id where clientes.id =2;

SELECT clientes.nome,consumo.nome,consumo.preco  FROM consumo consumo INNER JOIN clientes clientes ON clientes.id where clientes.id =2;

E nessas consultas acontece o problema de só aparece a lista se o cliente consumir tudo

SELECT clientes.nome,karts.valor_aluguel,pista.preco,aluguel.preco_barracao from clientes clientes INNER JOIN karts karts INNER JOIN pista pista INNER JOIN aluguel aluguel ON clientes.id = karts.id = aluguel.id = pista.id WHERE clientes.id =

Se alguém puder me ajudar segue abaixo minhas tabelas

create table clientes (id int  primary key auto_increment, data_cad varchar(15) not null, nome varchar(50) not null, tipo varchar(15) not null, data_nasc varchar (15) not null, sexo varchar (12) not null, est_civil varchar(15) not null, cpf varchar(16) not null, rg varchar(15) not null, orgao varchar(8), conjugue varchar(50), filhos varchar(2), telefone varchar(15), telefoneb varchar(15) , celular varchar(15), celularb varchar(15), cep varchar(12), endereco varchar(50) not null, num_res varchar(5) not null, complemento varchar(25), bairro varchar (30) not null, cidade varchar (35) not null, uf varchar (10) not null,  nacionalidade varchar (35) not null);

create table shopping (id int not null primary key auto_increment, precot varchar(10), produtot varchar(60), total varchar(15));

create table consumo (id int not null primary key auto_increment, nome varchar(60), preco varchar(10), total varchar(10));

create table aluguel (id int not null primary key auto_increment, idbarracao varchar(10), diainicial varchar(18), diafinal varchar(18), horainicial varchar(12), horafinal varchar(12), preco_barracao varchar(10));

create table karts (id int not null primary key auto_increment, data_cad varchar(15) not null, estado varchar(10) not null, situacao varchar(10) not null, placa varchar(30) not null, ano_fab varchar(10), ano_mod varchar(10), chassi  varchar (30), renavam varchar (20), num_motor varchar(20), marca varchar(20), modelo varchar (20), cor_ext varchar(15), cor_int varchar(15), combustivel varchar(15) not null, peso varchar(10), largura varchar(10), comprimento varchar (10), kilometragem varchar(10), alugado varchar(10),foto varchar(40), custo varchar(10), limpeza varchar(10), mecanica varchar(10), funilaria varchar(10), revisao varchar(10), debitos varchar(10), outros varchar(10), custo_par varchar(10), custo_total varchar(10), valor_aluguel varchar(10) not null);

Por favor se alguém souber me dah um help ae galera, já to em um nivel desesperador =S
Obrigado galera

com este modelo você não vai conseguir o resultado que espera na consulta. já dei uma sugestão para um modelo que deve servir, mas que você deve adaptar.

estude Formas Normais (Modelagem de Dados). não tenho acesso ao Google para linkar algo aqui, mas este conhecimento é fundamental.