gpt4 book ai didi

mysql - 如何在mysql中连接表并定义更多条件

转载 作者:行者123 更新时间:2023-11-29 21:41:58 26 4
gpt4 key购买 nike

我有两个表:coursescourses_partners。在我的类(class)表中,我有每门类(class)的属性。在 courses_partners 中只有两个属性:

course_id(foreign key to courses table)
partner_id(foreign key to partners table).

我想选择所有类(class),其中加入了 8 个合作伙伴(其中一个 course_idcourses_partners 中的行数为 8 ( 8 是从 courses.maxAmount 属性读取的数字))。怎么做?我有类似的东西,但这不起作用:

SELECT courses_partners.course_id, courses.title, courses.maxAmount FROM 
courses_partners RIGHT JOIN courses ON
(courses_partners.course_id=courses.course_id) GROUP BY
courses_partners.course_id HAVING COUNT(*) < courses.maxAmount

最佳答案

您可以使用:

SELECT *
FROM courses AS c
WHERE course_id IN (SELECT course_id
FROM courses_partners
GROUP BY course_id
HAVING COUNT(*) < c.maxAmount)

这将选择对 courses_partners 表的引用少于 maxAmount 的所有类(class)。

如果您希望这些引用包含少于maxAmount不同partner_id的记录,则使用此HAVING子句改为:

HAVING COUNT(DISTINCT partner_id) < c.maxAmount

Demo here

或者,您可以使用LEFT JOIN:

SELECT c.*
FROM courses AS c
LEFT JOIN (
SELECT course_id, COUNT(*) AS cnt
FROM courses_partners
GROUP BY course_id
) AS cp ON c.course_id = cp.course_id AND
c.maxAmount < cp.cnt

这还将返回在 courses_partners 中根本没有引用记录的 courses

Demo here

关于mysql - 如何在mysql中连接表并定义更多条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34416023/

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