我有两个表:courses
和courses_partners
。在我的courses
表中,我具有每门课程的属性。在courses_partners
中只有两个属性:
course_id(foreign key to courses table)
partner_id(foreign key to partners table).
我想选择所有
courses
,在它们上恰好加入8个伙伴(其中一个courses_partners
在course_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/