![](/img/trans.png)
[英]How to copy multiple tables (with same columns names) to a new table <SQL>.?
[英]SQL - Copy columns to new table
我有一張桌子:
桌柱
+----+--------+-----------------------+
| id | postId | path |
+----+--------+-----------------------+
| 1 | 22 | Hello/World |
| 2 | 23 | Hello/World/test |
| 3 | 24 | Hello/World |
| 4 | 25 | World/Monk |
| 5 | 26 | Test/Test2 |
| 6 | 27 | Hello/World/test |
| 7 | 28 | Hello/World/Something |
| 8 | 29 | Hello/World/Noa |
| 9 | 30 | Hello/World |
+----+--------+-----------------------+
id
是主鍵。 postId
也是唯一的。 path
不是唯一的。 我想要一種與 path 和 postId 存在多對一關系的關系。 所以一個 postId 可以有一個路徑,但是一個路徑可以有多個 postId。
因此,我想創建一個如下所示的新表(Table PostPathMap):
+----+--------+
| id | postId |
+----+--------+
| 22 | 1 |
| 23 | 2 |
| 24 | 3 |
| 25 | 4 |
| 26 | 5 |
| 27 | 6 |
| 28 | 7 |
| 29 | 8 |
| 30 | 9 |
+----+--------+
其中 postId 是主鍵。 然后我想刪除重復的條目,這樣我的 Table Post 就會變成這樣:
+----+-----------------------+
| id | path |
+----+-----------------------+
| 1 | Hello/World |
| 2 | Hello/World/test |
| 4 | World/Monk |
| 5 | Test/Test2 |
| 7 | Hello/World/Something |
| 8 | Hello/World/Noa |
+----+-----------------------+
因此我需要更新 PostPathMap。 如何在不手動執行的情況下更新此表?
更新后的預期 PostPathmap:
+----+--------+
| id | postId |
+----+--------+
| 22 | 1 |
| 23 | 2 |
| 24 | 1 |
| 25 | 4 |
| 26 | 5 |
| 27 | 2 |
| 28 | 7 |
| 29 | 8 |
| 30 | 1 |
+----+--------+
像這樣創建表PostPathMap
:
CREATE TABLE PostPathMap AS
SELECT postId id, id postId FROM Post;
更新PostPathMap
:
UPDATE PostPathMap ppm
INNER JOIN (
SELECT path, MIN(id) id
FROM Post
GROUP BY path
) t ON t.id < ppm.postid
INNER JOIN Post p
ON p.path = t.path AND p.id = ppm.postid
SET ppm.postid = t.id;
然后在UPDATE
語句中使用 self join 從Post
刪除重復項:
DELETE p1
FROM Post p1 INNER JOIN Post p2
ON p2.path = p1.path AND p2.id < p1.id;
請參閱演示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.