我有两个表:coursescourses_partners。在我的courses表中,我具有每门课程的属性。在courses_partners中只有两个属性:

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


我想选择所有courses,在它们上恰好加入8个伙伴(其中一个courses_partnerscourse_id中的num行是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)


这将选择所有对maxAmount表的引用少于courses_partners的课程。

如果希望这些引用包含少于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中完全没有引用记录的courses_partners

Demo here

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

10-10 04:52