0

我有以下表格:

Announcements:
id | title | body
-----------------------
1  | test1 | test body1
2  | test2 | test body2
3  | test3 | test body3

Tags:
id | title | parent_id
-------------------------
1  | tag1  | (NULL)
2  | tag2  | 1
3  | tag3  | 2

还有他们的数据透视表:

Announcement_tag:
announcement_id | tag_id
1               | 1
2               | 2
3               | 3

我希望数据透视表看起来像这样:

Announcement_tag:
announcement_id | tag_id
1               | 1
2               | 1
2               | 2
3               | 1
3               | 2
3               | 3

他们决定为新公告系统添加自动插入父母标签,但现在旧公告与新公告结合在一起,其中一些插入了父母标签,而另一些则没有。问题是他们不想删除旧公告。所以现在我需要找到一种方法来检查公告是否有他们父母的标签,以及它是否没有将它们插入到announcement_tag 表中。

4

1 回答 1

0

找到了一个可行的解决方案:

INSERT INTO announcement_tag (announcement_id, tag_id) 
   SELECT 
      a_t.`announcement_id`, t.`parent_id` 
   FROM announcement_tag AS a_t 
   INNER JOIN tags AS t 
   ON a_t.`tag_id` = t.`id` 
   WHERE t.`parent_id`!= 1 
   AND a_t.`announcement_id` IN (
       SELECT announcement_id FROM announcement_tag GROUP BY announcement_id 
       HAVING COUNT(tag_id) = 1
   );
于 2021-11-30T11:51:29.660 回答