簡體   English   中英

MySQL:用於相互連接的4個表的LEFT JOIN

[英]MySQL : LEFT JOIN for 4 tables which are connected to each other

我有4張桌子,如下所示:

1)課程

   | ID - > Primary Key | Name
   -------------------------------
   | 1                  | Course 1
   | 2                  | Course 2
   | 3                  | Course 3

2)國家

   | IDPrimary Key | Name
   -------------------------------
   | 1                  | Country 1
   | 2                  | Country 2
   | 3                  | Course 3

3)大學

   | ID - > Primary Key | Name           | country_id
   ---------------------------------------------------
   | 1                  | University 1   | 1
   | 2                  | University 2   | 1
   | 3                  | University 3   | 3

4)大學課程

   | ID - > Primary Key | university_id  | course_id
   ----------------------------------------------
   | 1                  | 1              | 2
   | 2                  | 3              | 2
   | 3                  | 3              | 3

現在,我需要在用於Android應用的核心PHP中創建一個REST API,因為我將獲得兩個參數country_idcourse_id 兩者都將包含多個值,例如country_id = "3,4,5"course_id = "1,6,8"

我必須根據國家課程對所有相關大學做出回應。

我已經嘗試過以下查詢,但是我沒有得到想要的輸出,所以如果有人對我的問題有任何想法,請幫助我。

SELECT * FROM universities LEFT JOIN countries ON countries.id = universities.country_id LEFT JOIN university_courses ON universiity_courses.university_id = universities.id LEFT JOIN courses ON courses.id = university_courses.course_id WHERE FIND_IN_SET(universities.country_id, ?) AND FIND_IN_SET(university_courses.course_id, ?)

如果course_id = 1,2country_id = 2,3 ,我期望的輸出應為:

| university_id |
| 3             |

更新:

以上問題已解決,但現在面臨的新問題是多次獲得同一university成績,例如:

如果course_id = 2,3我得到的響應為:

|university_id  |
------------------
|3              |
|3              |

為此,我使用了GROUP BY子句,但是如果刪除GROUP BY則會出現500 Internal Server Error ,它將正常運行。這可能是什么問題?

我的新查詢如下:

SELECT * FROM universities LEFT JOIN university_courses ON university_courses.university_id = universities.id LEFT JOIN courses ON courses.id = university_courses.course_id LEFT JOIN countries ON countries.id = universities.country_id WHERE FIND_IN_SET(university_courses.course_id, ?) AND FIND_IN_SET(universities.country_id, ?) GROUP BY university_courses.university_id

使用LEFT OUTER JOIN而不是LEFT JOIN

SELECT * FROM universities LEFT OUTER JOIN countries ON countries.id = universities.country_id LEFT OUTER JOIN university_courses ON universiity_courses.university_id = universities.id LEFT OUTER JOIN courses ON courses.id = university_courses.course_id WHERE FIND_IN_SET(universities.country_id, ?) AND FIND_IN_SET(university_courses.course_id, ?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM