gpt4 book ai didi

mysql - 返回 mysql 中一对多的行集而不重复

转载 作者:行者123 更新时间:2023-11-30 00:05:37 25 4
gpt4 key购买 nike

我有一个包含用户用户项目的数据库,其中每个用户可以将多个项目链接到其帐户。

我当前的 SELECT 查询遇到的问题是我想返回每个用户一次,但所有行都与该用户相关联,如下所示:

User 1 ¬
item id 1
item id 2
item id 3
User 2 ¬
item id 1
item id 3
etc

这将是我理想的获取结果,这样我就可以通过简单的循环正确处理数据...所以我尝试了左连接,但这不起作用。

我想知道如何获取上述结果?这是我当前的查询:

SELECT U.user_id, I.item_name  
FROM users U
LEFT JOIN user_items UI ON U.user_id = UI.user_id
INNER JOIN items I ON I.item_id = UI.item_id

目前,如果用户有两个或多个项目,我会收到用户 ID 的重复数据,这是我试图避免的。

最佳答案

如果我正确理解了问题,那么您正在尝试遍历主/详细关系。

每当您使用 JOIN 时,引擎都会输出每个匹配的行集。在这种情况下,如果用户拥有超过 1 个项目,它将与每个项目一起显示。这是您无法避免的,因为您无法获得包含不同数量列的结果集,或者“如果前一列具有相同值,则不输出此列”之类的内容。我不会尝试通过调整查询来解决它。仅当您还想拥有每个没有任何项目的用户时,LEFT JOIN 才会对您有帮助。

为了获得您想要的输出,您需要使用结果集。例如,您可以按 user_id 对结果进行排序,然后遍历该集合并仅在 user_id 更改时打印它。另一种选择是使用 2 个查询:一个查询获取每个用户(如果需要,您可以将其缩小到至少拥有一个项目的每个用户),另一个查询获取每个用户的项目,从第一个查询开始遍历结果查询。

这两种解决方案都要求您通过存储过程或编程语言来处理结果。

希望这有帮助!

关于mysql - 返回 mysql 中一对多的行集而不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24582751/

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