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 ?
Gabriel Carvalho

Gabriel Carvalho

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:

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

Arthur Heinrich
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar