[英]how to join tables and defined more conditions in mysql
I have two tables: courses
and courses_partners
. 我有两个表:
courses
和courses_partners
。 In my courses
table I have attributes of each course. 在我的
courses
表中,我具有每门课程的属性。 In courses_partners
there are only two attributes: 在
courses_partners
中,只有两个属性:
course_id(foreign key to courses table)
partner_id(foreign key to partners table).
I want to select all courses
, on which are joined exactly 8 partners(where num rows in courses_partners
for one course_id
is 8 (8 is number readed from courses.maxAmount
attribute)). 我想选择所有
courses
,在其上加入了正好8个合作伙伴(其中NUM行courses_partners
一个course_id
是8(8是readed数courses.maxAmount
属性))。 How to do it? 怎么做? I have something like this, but this not working:
我有这样的事情,但这不起作用:
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
You can use: 您可以使用:
SELECT *
FROM courses AS c
WHERE course_id IN (SELECT course_id
FROM courses_partners
GROUP BY course_id
HAVING COUNT(*) < c.maxAmount)
This will select all courses having less than maxAmount
references to courses_partners
table. 这将选择所有对
courses_partners
表的引用少于 maxAmount
课程。
If you want those references to contain less than maxAmount
records with distinct partner_id, then use this HAVING
clause instead: 如果您希望这些引用包含少于
maxAmount
具有不同 partner_id的记录,请改用此HAVING
子句:
HAVING COUNT(DISTINCT partner_id) < c.maxAmount
Alternatively you can use a LEFT JOIN
: 另外,您可以使用
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
This will also return courses
having no referencing records in courses_partners
at all. 这也将返回
courses
中没有引用记录courses_partners
可言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.