Como migrar IDs da tabela JOIN para a coluna de chave estrangeira no MySQL

nburk:

Eu tenho as seguintes tabelas no meu banco de dados MySQL:

CREATE TABLE `User` (
  `id` char(25) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email_UNIQUE` (`email`(191))
);

CREATE TABLE `Post` (
  `id` char(25) NOT NULL,
  `authorId` char(25) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `authorId` (`authorId`),
  CONSTRAINT `Post_ibfk_1` FOREIGN KEY (`authorId`) REFERENCES `User` (`id`)
);

CREATE TABLE `_PostToUser` (
  `A` char(25) CHARACTER SET utf8 NOT NULL,
  `B` char(25) CHARACTER SET utf8 NOT NULL,
  UNIQUE KEY `PostToUser_AB_unique` (`A`,`B`),
  KEY `B` (`B`),
  CONSTRAINT `_PostToUser_ibfk_1` FOREIGN KEY (`A`) REFERENCES `Post` (`id`) ON DELETE CASCADE,
  CONSTRAINT `_PostToUser_ibfk_2` FOREIGN KEY (`B`) REFERENCES `User` (`id`) ON DELETE CASCADE
);

O relacionamento entre Usere Postagora é gerenciado através da _PostToUsertabela JOIN.

No entanto, quero me livrar dessa tabela JOIN extra e simplesmente ter uma referência de chave estrangeira de Postpara User, então executei essa consulta para criar a chave estrangeira:

ALTER TABLE `Post` ADD COLUMN `authorId` char(25);
ALTER TABLE `Post` ADD FOREIGN KEY (`authorId`) REFERENCES `User` (`id`);

Agora, eu estou querendo saber qual consulta SQL eu preciso executar para migrar os dados da tabela JOIN para a nova authorIdcoluna? Se entendi corretamente, preciso de uma consulta que leia todas as linhas da _PostToUsertabela de relações e para cada linha:

  1. Localiza o respectivo Postregistro pesquisando o valor da colunaA
  2. Insere o valor da coluna Bcomo o valor authorIddesse Postregistro

Observe que estou ciente de que isso altera o relacionamento de mn e o restringe a 1-n: uma postagem pode ter no máximo um autor. Um autor / usuário pode escrever muitas postagens.


Basicamente, estou procurando o equivalente a esta declaração do PostgreSQL :

UPDATE "Post" post
SET "authorId" = post_to_user."B"
FROM "_PostToUser" post_to_user 
WHERE post_to_user."A" = post."id";
Akina:
  1. Verifique se os _PostToUser.Avalores são exclusivos (sem valores duplicados). Se existir - edite seus dados (remova registros em excesso, por exemplo).
  2. Executar
UPDATE Post, _PostToUser
SET Post.authorId = _PostToUser.B
WHERE Post.id = _PostToUser.A
  1. Verifique se não há NULLs no Post.authorId

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Como migrar IDs da tabela JOIN para a coluna de chave estrangeira no PostgreSQL

Como migrar IDs da tabela JOIN para a coluna de chave estrangeira no PostgreSQL

Como eliminar a restrição única da tabela mysql em uma coluna de chave estrangeira

Atualize a nova coluna de chave estrangeira da tabela existente com ids de outra tabela no SQL Server

Atualize a nova coluna de chave estrangeira da tabela existente com ids de outra tabela no SQL Server

Atualize a nova coluna de chave estrangeira da tabela existente com ids de outra tabela no SQL Server

Como tornar uma coluna da tabela b única apenas para diferentes entradas de chave estrangeira na tabela a

Como obtenho o nome da tabela e o nome da coluna da tabela que tem referência de chave estrangeira para a tabela mestre?

Extraia uma coluna de uma tabela para outra e armazene o id da linha inserida como chave estrangeira (PostgreSQL)

como posso mover os dados da coluna para outra tabela e definir seu id para a coluna de chave estrangeira na primeira tabela?

MySQL Como faço para usar uma chave estrangeira para identificar uma coluna em outra tabela?

Posso usar outra coluna da minha tabela como chave estrangeira

SQL: como substituir a coluna de chave estrangeira com dados da tabela referenciada?

Laravel acessa a coluna da tabela de chave estrangeira no blade

Alterando a coluna varchar para a chave estrangeira de outra tabela SQL

Como faço para carregar antecipadamente várias linhas de chave estrangeira da mesma tabela, no Sequelize?

Como faço para carregar antecipadamente várias linhas de chave estrangeira da mesma tabela, no Sequelize?

Erro 150 do MySQL Não é possível atribuir gênero como uma chave estrangeira da tabela de gênero para a tabela de álbum

Como usar o nome da propriedade personalizada para a coluna de chave estrangeira no Entity Framework

Como escolher o nome da coluna de chave estrangeira usando Sequelize e mySql?

Formato de chave estrangeira MySQL durante a criação da tabela

Adicionar coluna de chave estrangeira à tabela existente

Como obter a soma da coluna da tabela primária (Ex: coluna Preço) usando a chave foriegn da tabela estrangeira?

Como obter o valor de substituição da coluna por sua chave estrangeira correspondente em outra tabela?

Como ver se a coluna da minha tabela é uma chave estrangeira ou não está no banco de dados H2

Como selecionar uma linha de tabela usando chave estrangeira no MySQL?

Como selecionar uma linha de tabela usando chave estrangeira no MySQL?

No SQLite, como altero uma tabela para adicionar uma coluna com restrição de chave estrangeira e nula padrão?

Como migrar a coluna da tabela não nula para o nulo no banco de dados da sala Android