Como fazer um UPDATE em uma tabela com o valor de outra tabela em um dos campos?

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!

Agora, me responda, por que necessita de INNER JOIN no update?

UPDATE CLIENTE SET bairro_id = ? WHERE id = ?

Entendeu?

Porque ao atualizar a tabela cliente eu faria:

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.


Ainda vou pôr esse SQL dentro códogo JAVA. PRECISO QUE O CAMPO BAIRRO RECEBA O BAIRRO, AO INVÉS DO BAIRRO_ID!

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 = ?

Entendeu? Lembrando, apenas exemplos, ok?

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!!!