如何解决如何将表中的列转换为mysql中的表?
我知道这是一个不好的标题,但是我不知道如何用一行来描述我的问题。 我想在我的数据库中存储以下信息。
+----+----------+-----------+-----------+
| id | name | cluster_1 | cluster_2 |
+----+----------+-----------+-----------+
| 1 | content_1| true| false |
| 2 | content_2| false| true |
| 3 | content_3| true| true |
+----+----------+-----------+-----------+
cluster_1 = true表示该内容存在于cluster_1上。
由于某些群集可能会添加或删除,我想将群集信息存储在新表“群集”中,并使用“ content_cluster”表指示内容和群集之间的关系。
table contents
+----+----------+
| id | name |
+----+----------+
| 1 | content_1|
| 2 | content_2|
| 3 | content_3|
+----+----------+
table clusters
+----+----------+
| id | name |
+----+----------+
| 1 | cluster_1|
| 2 | cluster_2|
+----+----------+
table content_cluster
+----------+----------+
|content_id|cluster_id|
+----------+----------+
| 1 | 1 |
| 2 | 2 |
| 3 | 1 |
| 3 | 2 |
+----------+----------+
但是,以这种方式编写的内容,我不知道如何获取在cluster_1上但不在cluster_2上的内容,反之亦然。我必须经常执行此查询。那么有效的方法是什么?
解决方法
如何获取在cluster_1上但不在cluster_2上的内容
一般
SELECT contents.name
FROM contents
JOIN content_cluster ON contents.id = content_cluster.content_id
LEFT JOIN clusters ON clusters.id = content_cluster.cluster_id
GROUP BY contents.name
HAVING SUM(clusters.name = 'cluster_1') -- not zero,may add ">0"
AND !SUM(clusters.name = 'cluster_2') -- zero,may replace NOT ("!") with "=0"
,
以下方法应该起作用:
-- For cluster 1
INSERT INTO new_table (content_id,cluster_id)
SELECT old_table.content_id,1
FROM old_table
WHERE old_table.cluster_1 = TRUE;
-- For cluster 2
INSERT INTO new_table (content_id,2
FROM old_table
WHERE old_table.cluster_2 = TRUE;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。