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 User
e Post
agora é gerenciado através da _PostToUser
tabela JOIN.
No entanto, quero me livrar dessa tabela JOIN extra e simplesmente ter uma referência de chave estrangeira de Post
para 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 authorId
coluna? Se entendi corretamente, preciso de uma consulta que leia todas as linhas da _PostToUser
tabela de relações e para cada linha:
Post
registro pesquisando o valor da colunaA
B
como o valor authorId
desse Post
registroObserve 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";
_PostToUser.A
valores são exclusivos (sem valores duplicados). Se existir - edite seus dados (remova registros em excesso, por exemplo).UPDATE Post, _PostToUser
SET Post.authorId = _PostToUser.B
WHERE Post.id = _PostToUser.A
Post.authorId
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras