Olá, tenho duas tabela que se relacionam. A tabela cliente e tabela bairro. A tabela cliente possui a chave primária “id”, a chave estrangeira “bairro_id”, entre outros campos. A tabela bairro obviamente possui a chave primária “id”, entre outros campos. O que pretendo fazer e que não está dando certo, é realizar o UPDATE dos registros da tabela cliente, porém não quero digitar um número no campo “bairro_id”, o que quero é digitar o bairro corresponde ao código.
Tentei fazer com este código, veja:
UPDATE cliente INNER JOIN bairro on bairro.id = cliente.bairro_id SET cliente.nome='Francisco Jonas Pereira', cliente.cpf='98989898989', cliente.telefone='85987878556', cliente.endereco='Rua Dr. Emanuel Sousa', cliente.numero='123', bairro.descricao='Vila Peri', cliente.sexo='M' WHERE cliente.id=4;
Acontece que esta sintaxe está alterando o bairro de todos os cliente, e nesse exemplo quero alterar apenas para o cliente com “id=4”. Por favor, alguém pode me ajudar!
UPDATE cliente SET nome='TESTE DECISIVO', cpf='66666666666', telefone='999999999', endereco='RUA DISTANTE', numero='123', bairro_id='1', sexo='M' WHERE id=12;
Mas eu preciso digitar o bairro do cliente, ao invés de digitar seu id. A tabela bairro tem o campo “descricao”, como eu vou fazer UPDATE na tabela cliente e ainda fazer UPDATE na “descricao” do bairro ao mesmo tempo?
Faça apenas uma coisa e a faça bem feito.
Se o ID do bairro não mudou (creio que este ID seja a chave primária do mesmo), não tem razão para alterar esse ID, certo? Altera a descrição do bairro e pronto.
Agora, se o cliente muda de bairro, muda-se o id do bairro, conforme orientei anteriormente.
Se quer fazer assim, faz.
Mas, eu entendo que a maneira correta é separar as coisas.
Ao longo dessa minha pequena experiência com desenvolvimento, aprendi que eu não gosto de complicar e que não sou dono da verdade.
Na tua query o que tu precisas é exatamente de colocar o bairro_id
Agora, o que queres mostrar ao utilizador e pedir de volta, obviamente não será esse id.
Antes de efetuar ao update tens defazer um select para saber qual o bairro_id correspondente.
Não faço ideia de como fazer isso… Se eu não conseguir, acho que não vou passar na matéria de java, no curso técnico. Só queria que o campo bairro tivesse o mesmo esfeito que tem dentro do PHP MyAdmin, que clico no nome do bairro e quando vou olhar o código, ele pôs o bairro_id.
Não é uma questão de efeito, e uma questão de lógica.
Eu não sei de que maneira você foi ensinado/orientado até chegar neste modelo que adotou, porém, para mim, está errado.
A maneira como você está vendo não te permite entender que entre duas tabelas quaisquer A e B que tenham relação entre elas, onde cada elemento de A está ligado a um único elemento de B e um elemento de B está ligado a nenhum ou vários elementos de A (cada cliente reside em apenas um bairro e cada bairro é residido por vários clientes), ou seja, relação 1 : N.
Neste caso, você vai ter uma chave estrangeira de B (bairro) em A (cliente), como já tem.
Isso permite que, a partir de um elemento de A você identifique qual o elemento B relativo
SELECT * FROM A a INNER JOIN B b on a.b_id = b.id WHERE a.xyz= ?;
No teu caso, algo como
SELECT * FROM cliente c INNER JOIN bairro b ON c.bairro_id = b.id WHERE c.nome = ?;
Isso trará todas as colunas de cliente mais todas as colunas de bairro.
Então, se o intuito é alterar o bairro no qual o cliente reside, você precisa usar
UPDATE cliente SET bairro_id = ?
E para alterar a descrição do bairro
UPDATE bairro SET descricao = ? WHERE id = ?
Ficou claro?
Afinal, o select que sugeri poderia ser, apenas
SELECT c.nome, b.descricao FROM cliente c INNER JOIN bairro b ON c.bairro_id = b.id WHERE c.id = ?
Oi darlan_machado, obigado pelas orientações, vou examinas-las com atenção e tentarei entender. O meu nível em banco de dados é básico. O que sei aprendi no Curso em Vídeo com o Guanabara, e faz um tempo, preciso revisar e ampliar meus conhecimentos, reconheço Kkkkk… Por isso a situação que apareceu em meu projeto me deixou confuso e talvez eu não tenha transmitido com clareza a minha dúvida.
Contudo, marquei para estudar com uma colega, e ela conseguiu visualizar a resposta certa para o código SQL, veja:
UPDATE cliente SET nome='JANAINA', cpf='123.123.123-12', telefone='997701745', endereco='RUA TRÊS CORAÇÕES', numero='123', bairro_id = (select id from bairro where descricao ='MONTESE'), sexo='F' WHERE id=3;
Como você falou, não precisa de JOIN e envolve um SELECT, como o “pmim” havia dito, mas não explicou como. Obrigado!!!