我有一个users
和user items
的数据库,每个用户可以将多个项目链接到他们的帐户。
使用我当前的SELECT
查询时遇到的问题是我想要返回每个用户一次,但是所有与该用户绑定的行都是这样的:
User 1 ¬
item id 1
item id 2
item id 3
User 2 ¬
item id 1
item id 3
etc
这将是我理想的获取结果,因此我可以通过简单的循环正确处理数据...所以我尝试了left join
但这不起作用。
我想知道如何获取上述结果?这是我目前的查询:
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的重复数据,我试图避免这样做。
答案 0 :(得分:0)
如果我正确理解了问题,那么您正试图遍历主/细节关系。
每当您使用JOIN时,引擎都会输出每个匹配的行集。在这种情况下,如果用户有多个项目,它将与每个项目一起出现。这不是你可以避免的,因为你不能有一个具有不同数量的列的结果集或类似“如果前一个具有相同的值,则不输出该列”。我不会尝试解决它调整查询。 LEFT JOIN仅在您希望每个没有任何项目的用户时帮助您。
为了获得所需的输出,您需要使用结果集。例如,您可以通过user_id对结果进行排序,然后遍历该集并仅在更改时打印user_id。另一种选择是使用2个查询:一个用于获取每个用户(如果需要,可以将其缩小到每个至少包含一个项目的用户),另一个用于获取每个用户的项目,遍历第一个查询的结果查询。
这两种解决方案都要求您通过存储过程或编程语言处理结果。
希望这有帮助!