Inserir Dados SQL
09/06/2023
0
Olá
Eu tenho uma dúvida sobre inserção de uma tabela dentro de outra tablea
Eu tenho a tabela livros e nela tem um campo "idEdtitora" e tenho uma tabela iditora com o campo "idEditora"
Eu quero passar os id's da tabela editora pra tabela de livros, mas o meu insert não funciona.
insert into livros (idEditoras) (select codEditoraint from editoras)
Esse código bsicamente cria novos registros ao invés de inserir naqueles que já existem.
Eu tentei fazer um update também, mas aparece uma mensagem de erro:
update livros set idEditoras = (select codEditoraint from editoras)
Alguém pode me ajudar ?
Eu tenho uma dúvida sobre inserção de uma tabela dentro de outra tablea
Eu tenho a tabela livros e nela tem um campo "idEdtitora" e tenho uma tabela iditora com o campo "idEditora"
Eu quero passar os id's da tabela editora pra tabela de livros, mas o meu insert não funciona.
insert into livros (idEditoras) (select codEditoraint from editoras)
Esse código bsicamente cria novos registros ao invés de inserir naqueles que já existem.
Eu tentei fazer um update também, mas aparece uma mensagem de erro:
update livros set idEditoras = (select codEditoraint from editoras)
Alguém pode me ajudar ?
Gabriel Carvalho
Curtir tópico
+ 0
Responder
Post mais votado
09/06/2023
Cada livro contido na tabela "livros" pode pertencer a uma editora diferente.
Neste caso, o que você tem é uma corrupção lógica dos dados, já que o vínculo entre livro-editora foi perdido (ou nunca existiu).
A menos que você tenha alguma característica, na tabela "livros" que faça referência à editora (fora o código "idEditoras que está nulo ou incorreto), de forma a poder localizar unicamente a editora do livro, será impossível fazer esta atualização.
Vamos supor, por um momento, que a sua tabela "livros" não estava normalizada e contivesse uma coluna chamada "nomEditoravc", para conter o nome da editora.
Você pode estar tentando normalizar a tabela, eliminando a redundância da coluna "nomEditoravc", através da criação da tabela "editoras" e estabelecendo uma foreign key da tabela "livros" apontando para a tabela "editoras".
Neste caso, você tem o nome da editora (nomEditoravc) como vínculo entre as duas e pode fazer a seguinte atualização:
Desta forma, para cada livro que não possui o idEditoras preenchido, o banco busca o codEditoraint na tabela editoras a partir do nome da editora e adualiza a FK da tabela livros.
Supondo que esta atualização tenha sucesso e agora todos os livros tem seu relacionamento estabelecido, você precisa fazer mais duas coisas para que seu modelo fique correto:
- Dropar a coluna nomEditoravc da tabela livros
- Criar a constraint de foreign key, para garantir que todo livro inserido seja associado a uma editora válida
Neste caso, o que você tem é uma corrupção lógica dos dados, já que o vínculo entre livro-editora foi perdido (ou nunca existiu).
A menos que você tenha alguma característica, na tabela "livros" que faça referência à editora (fora o código "idEditoras que está nulo ou incorreto), de forma a poder localizar unicamente a editora do livro, será impossível fazer esta atualização.
Vamos supor, por um momento, que a sua tabela "livros" não estava normalizada e contivesse uma coluna chamada "nomEditoravc", para conter o nome da editora.
Você pode estar tentando normalizar a tabela, eliminando a redundância da coluna "nomEditoravc", através da criação da tabela "editoras" e estabelecendo uma foreign key da tabela "livros" apontando para a tabela "editoras".
Neste caso, você tem o nome da editora (nomEditoravc) como vínculo entre as duas e pode fazer a seguinte atualização:
update livros set idEditoras = editoras.codEditoraint from livros inner join editoras on editoras.nomEditoravc = livros.nomEditoravc) where livros.idEditoras is null
Desta forma, para cada livro que não possui o idEditoras preenchido, o banco busca o codEditoraint na tabela editoras a partir do nome da editora e adualiza a FK da tabela livros.
Supondo que esta atualização tenha sucesso e agora todos os livros tem seu relacionamento estabelecido, você precisa fazer mais duas coisas para que seu modelo fique correto:
- Dropar a coluna nomEditoravc da tabela livros
- Criar a constraint de foreign key, para garantir que todo livro inserido seja associado a uma editora válida
alter table livros drop column nomEditoravc alter table livros add constraint fkEditoraLivros foreign key (idEditoras) references editoras (codEditoraint)
Arthur Heinrich
Responder
Clique aqui para fazer login e interagir na Comunidade :)