gpt4 book ai didi

mysql - 具有多个 INNER JOIN 的多列上的 GROUP BY

转载 作者:行者123 更新时间:2023-11-29 15:43:50 25 4
gpt4 key购买 nike

我有一个简单的选择查询,它将 5 个表连接在一起以获取信息。我想要两个不同表上两列的不同值,而不是两列值的不同组合。

社区表

+--------+----+------------------+-----------------+------+
| title | id | shortdescription | longdescription | type |
+--------+----+------------------+-----------------+------+
| Sci-fi | 14 | Lorem ipsum | Lorem ipsum | mix |
+--------+----+------------------+-----------------+------+

社区标签类别表:

+-----------+----------+
| community | category |
+-----------+----------+
| 14 | 5 |
| 14 | 9 |
| 14 | 17 |
| 14 | 18 |
+-----------+----------+

标签类别表

+-----------+----+
| category | id |
+-----------+----+
| character | 5 |
| warning | 9 |
| mention | 17 |
| focus | 18 |
+-----------+----+

社区标签表:

+-----------+-----+
| community | tag |
+-----------+-----+
| 14 | 136 |
| 14 | 137 |
| 14 | 138 |
| 14 | 139 |
+-----------+-----+

标签表:

+--------+-----+
| name | id |
+--------+-----+
| sci-fi | 136 |
| space | 137 |
| aliens | 138 |
| future | 139 |
+--------+-----+

这是我一直在尝试的查询:

SELECT c.title, c.id, c.shortdescription, c.longdescription, c.type, tc.category, t.name AS 'tag'
FROM Community c, CommunityTagCategories cc, TagCategory tc, CommunityTags ct, Tag t
WHERE c.id=cc.community
AND cc.category=tc.id
AND ct.tag=t.id
AND c.id=ct.community
AND c.id=14;

Community 144 tag 类别和 4 个标签,理想情况下我希望返回 4 个结果。但是它返回 16 个结果,因为它为我提供了标签类别和标签的所有可能组合。

我想看到的结果(社区表中的信息因空间而被截断):

+-------------------------+--------------+-----------+
| community columns | tag category | tag |
+-------------------------+--------------+-----------+
| community info repeated | sci-fi | character |
| community info repeated | space | warning |
| community info repeated | aliens | mention |
| community info repeated | future | focus |
+-------------------------+--------------+-----------+

如果我使用 "GROUP BY t.id" 这将返回 4 个标签,但它只返回重复四次的一个标签类别( 反之亦然) “按 tc.id 分组”)。

如果我使用逗号,如 "GROUP BY tc.id, t.id" ,那么它会再次返回 16 结果。

“GROUP BY tc.id AND t.id” 不返回任何内容。

有没有办法只获取 4 个标签类别和 4 个标签的 4 行?

最佳答案

如果标签和类别之间没有关系,除了在子查询中制造“行号”并将其用作连接条件之外,实际上没有办法获得您想要的东西,然后您就必须处理更多的情况标签多于类别,或者类别多于标签(因为 MySQL 仍然没有 FULL OUTER JOIN)。

这是更好的处理方法,作为数据的多个查询,然后在客户端处理演示。

关于mysql - 具有多个 INNER JOIN 的多列上的 GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57296286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com