簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM