gpt4 book ai didi

MySQL:使用具有多个子元素的连接限制与 FROM 相关的结果

转载 作者:行者123 更新时间:2023-11-29 04:27:21 24 4
gpt4 key购买 nike

我有一个我从中选择的主表和一个包含我在连接中选择的子元素的表。示例:

person         skill           person_to_skill
id | name id | skill id | p_id | s_id
------------ ------------ ----------------
1 | jim 1 | sewing 1 | 1 | 2
2 | peter 2 | cooking 2 | 2 | 1
3 | susan 3 | singing 3 | 2 | 3
4 | kevin 4 | 3 | 1
5 | 3 | 2
6 | 4 | 3

所以现在我们看到,sim 只有一种技能,peter 有两种,依此类推。现在,如果我从 person、koin skill 中选择,然后也加入 person_to_skill,但我只想要两个人。我如何在不分组的情况下做到这一点,从而无法获得所有技能?

简而言之:我想从“人”中选出两个人,他们的所有技能。

我尝试只使用 LIMIT 但这限制了结果行,而不是人员。如果我使用GROUP BY,我每个人只能获得一项技能。如果没有子选择,这可能吗?

有什么想法吗?

到目前为止,我的方法已更改为使用该示例,如下所示:

SELECT p.id,p.name,s.skill
FROM person AS p
LEFT JOIN person_to_skill psk ON (psk.p_id = p.id)
LEFT JOIN skill s ON (s.id = psk.s_id)
ORDER BY p.name
LIMIT 0,2

最佳答案

在子查询中一开始限制人数,然后像您已经完成的那样加入其他表:

SELECT p.id,p.name,s.skill
FROM (select * from person ORDER BY name LIMIT 0,2) AS p
LEFT JOIN person_to_skill psk ON (psk.p_id = p.id)
LEFT JOIN skill s ON (s.id = psk.s_id)

在评论后添加:

如果您真的不能使用子查询,您可以使用两个查询来实现。首先选择用户id:

select id from person ORDER BY name LIMIT 0,2

然后在下一个查询中使用这些 ID:

SELECT p.id,p.name,s.skill
FROM person p
LEFT JOIN person_to_skill psk ON (psk.p_id = p.id)
LEFT JOIN skill s ON (s.id = psk.s_id)
WHERE p.id IN (ids from previous query)

关于MySQL:使用具有多个子元素的连接限制与 FROM 相关的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8849532/

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