好吧,無論出於何種原因,我最終會遇到這樣一種情況:密鑰在一對多中指向錯誤的方向。它顯然從來沒有被用作一對多的,只是作爲一對一的,現在有必要將其中的一個擴展成很多,並且鑰匙存儲的方式原來是向後的。SQL中交換一對多關係方向的最佳方法是什麼?
images
表具有target_id
,target_type
和target_column
三條信息,它們用任意數量的內容表標識它。 target_type
只引用與圖像關聯的內容片段的表名稱。 target_column
是用於查找圖像的虛擬列的名稱(實際不在內容表中)。這使得任何一段內容都可以有幾個相關的圖像,每個圖像都有不同的名稱。
當你有一塊內容,並希望找到什麼樣的形象被關聯到一個特定的名字,你做一個
select * from images where target_id = content.id
and target_type = "content"
and target_column = "image";
所有這些信息是可用的,當你有一個特定的引用一塊內容。
我想要做的就是反轉所有這些,這樣圖像表就不會對引用它的特定內容片斷一無所知,而是每個內容表格都承載着這些負擔。
到目前爲止,我知道我可以一列添加到內容表,然後選擇我從圖像表所需的信息:
select id, target_id from images where target_type = "content";
我想要做的就是用這個作爲一個子查詢,並做了內容表的大量更新。是這樣的可能嗎?
update content set image_id =
(select id from images where target_type = "content") as image_ids where id =
(select target_id from images where target_type = "content") as content_ids;
我知道這會失敗,但我想做一些target_ids的質量分配返回到image_ids。這是瘋了嗎?我該怎麼做呢?