2015-12-22 16 views
0

我有兩個表:coursescourses_partners。在我的courses表中,我有每門課程的屬性。在courses_partners只有有兩個屬性:如何連接表並在mysql中定義更多條件

我想選擇所有courses,在其上加入了正好8個合作伙伴(其中courses_partners NUM行一course_id是8(8從courses.maxAmount屬性readed號)) 。怎麼做?我有這樣的事情,但是這不工作:

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 
+0

示例數據將闡明您正在嘗試執行的操作。 –

+0

如果給定課程中有8個以上的合作伙伴,MySQL應該如何確定您希望返回哪8個合作伙伴? – eggyal

+0

我有課程表,例如行屬性course_id = 7和maxAmonut = 8 ....當我在courses_partners少於8行where course_id = 7這個課程將返回。 – user5503823

回答

0

您可以使用:

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引用的所有課程。

如果你想這些引用包含具有不同 PARTNER_ID 小於maxAmount記錄,然後用這個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

+0

中沒有行(0)時返回課程,感謝此工作。但是,如果courses_partners中的某些課程沒有行嗎? – user5503823

+0

@ user5503823然後本課程的一行不會被退回。這符合您只要將具有'maxAmount'引用的課程返回到'courses_partners'的要求。你想要別的嗎? –

+0

我想使用:HAVING COUNT(*) user5503823