2016-08-01 24 views
-4

我有四张名为college_list,course_list,branch_list,semester_list的表。并在这些表上应用了JOIN。如何在mysql中选择DISTINCT记录uisng在四个表上JOIN

SELECT DISTINCT college_list.clg_name, course_list.crs_name, branch_list.bran_name, semester_list.sem_name FROM college_list 
     LEFT JOIN course_list ON college_list.clg_code = course_list.crs_clg_code 
     LEFT JOIN branch_list ON course_list.crs_code = branch_list.bran_crs_code 
     LEFT JOIN semester_list ON branch_list.bran_crs_code = semester_list.sem_crs_code GROUP BY bran_name 
     UNION ALL 
     SELECT DISTINCT college_list.clg_name, course_list.crs_name, branch_list.bran_name, semester_list.sem_name FROM college_list 
     RIGHT JOIN course_list ON college_list.clg_code = course_list.crs_clg_code 
     LEFT JOIN branch_list ON course_list.crs_code = branch_list.bran_crs_code 
     LEFT JOIN semester_list ON branch_list.bran_crs_code = semester_list.sem_crs_code GROUP BY bran_name 
     UNION ALL 
     SELECT DISTINCT college_list.clg_name, course_list.crs_name, branch_list.bran_name, semester_list.sem_name FROM college_list 
     RIGHT JOIN course_list ON college_list.clg_code = course_list.crs_clg_code 
     RIGHT JOIN branch_list ON course_list.crs_code = branch_list.bran_crs_code 
     LEFT JOIN semester_list ON branch_list.bran_crs_code = semester_list.sem_crs_code GROUP BY bran_name 
     UNION ALL 
     SELECT DISTINCT college_list.clg_name, course_list.crs_name, branch_list.bran_name, semester_list.sem_name FROM college_list 
     RIGHT JOIN course_list ON college_list.clg_code = course_list.crs_clg_code 
     RIGHT JOIN branch_list ON course_list.crs_code = branch_list.bran_crs_code 
     RIGHT JOIN semester_list ON branch_list.bran_crs_code = semester_list.sem_crs_code GROUP BY bran_name 

该查询结果如下。

enter image description here

但我想要的大学名称来一次。和其他栏一样。 那么如何使用GROUP BY或DISTINCT命令来获取呢?

+0

分组最好用于这项工作 –

+0

但它不工作 –

+0

你能告诉我如何使用它 –

回答

0

写代码,我觉得你的问题将得到解决

SELECT college_list.clg_name, course_list.crs_name, branch_list.bran_name, semester_list.sem_name FROM college_list 
        LEFT JOIN course_list ON college_list.clg_code = course_list.crs_clg_code 
        LEFT JOIN branch_list ON course_list.crs_code = branch_list.bran_crs_code 
        LEFT JOIN semester_list ON branch_list.bran_crs_code = semester_list.sem_crs_code GROUP BY bran_name 
        UNION ALL 
        SELECT DISTINCT college_list.clg_name, course_list.crs_name, branch_list.bran_name, semester_list.sem_name FROM college_list 
        RIGHT JOIN course_list ON college_list.clg_code = course_list.crs_clg_code 
        LEFT JOIN branch_list ON course_list.crs_code = branch_list.bran_crs_code 
        LEFT JOIN semester_list ON branch_list.bran_crs_code = semester_list.sem_crs_code GROUP BY bran_name 
        UNION ALL 
        SELECT DISTINCT college_list.clg_name, course_list.crs_name, branch_list.bran_name, semester_list.sem_name FROM college_list 
        RIGHT JOIN course_list ON college_list.clg_code = course_list.crs_clg_code 
        RIGHT JOIN branch_list ON course_list.crs_code = branch_list.bran_crs_code 
        LEFT JOIN semester_list ON branch_list.bran_crs_code = semester_list.sem_crs_code GROUP BY bran_name 
        UNION ALL 
        SELECT DISTINCT college_list.clg_name, course_list.crs_name, branch_list.bran_name, semester_list.sem_name FROM college_list 
        RIGHT JOIN course_list ON college_list.clg_code = course_list.crs_clg_code 
        RIGHT JOIN branch_list ON course_list.crs_code = branch_list.bran_crs_code 
        RIGHT JOIN semester_list ON branch_list.bran_crs_code = semester_list.sem_crs_code GROUP BY bran_name 

        group by college_list.clg_name 
+0

对不起,它显示一个错误 –

1

因为我没有从表中的数据,我不能够测试我的解决方案。我建议以下查询:

SELECT * FROM (SELECT college_list.clg_name, course_list.crs_name, branch_list.bran_name, semester_list.sem_name FROM college_list 
     LEFT JOIN course_list ON college_list.clg_code = course_list.crs_clg_code 
     LEFT JOIN branch_list ON course_list.crs_code = branch_list.bran_crs_code 
     LEFT JOIN semester_list ON branch_list.bran_crs_code = semester_list.sem_crs_code 
     UNION ALL 
     SELECT DISTINCT college_list.clg_name, course_list.crs_name, branch_list.bran_name, semester_list.sem_name FROM college_list 
     RIGHT JOIN course_list ON college_list.clg_code = course_list.crs_clg_code 
     LEFT JOIN branch_list ON course_list.crs_code = branch_list.bran_crs_code 
     LEFT JOIN semester_list ON branch_list.bran_crs_code = semester_list.sem_crs_code 
     UNION ALL 
     SELECT DISTINCT college_list.clg_name, course_list.crs_name, branch_list.bran_name, semester_list.sem_name FROM college_list 
     RIGHT JOIN course_list ON college_list.clg_code = course_list.crs_clg_code 
     RIGHT JOIN branch_list ON course_list.crs_code = branch_list.bran_crs_code 
     LEFT JOIN semester_list ON branch_list.bran_crs_code = semester_list.sem_crs_code 
     UNION ALL 
     SELECT DISTINCT college_list.clg_name, course_list.crs_name, branch_list.bran_name, semester_list.sem_name FROM college_list 
     RIGHT JOIN course_list ON college_list.clg_code = course_list.crs_clg_code 
     RIGHT JOIN branch_list ON course_list.crs_code = branch_list.bran_crs_code 
     RIGHT JOIN semester_list ON branch_list.bran_crs_code = semester_list.sem_crs_code) AS TEMP GROUP BY clg_name, crs_name, bran_name, sem_name 

你先结合单独的查询,形成一个虚拟的表,然后由所有列该表分组选择。您希望对整个结果集进行分组,而不是由4个查询分别进行分组。

+0

看到当我用上面的代码显示“College 1College 1College 1大学1大学1大学2 ...“等等......但我想只有不同的学院名称,即”大学1大学2“ –

+0

好吧,然后由clg_name只分组。但是,除了一个(你不知道哪一个 - 它将在数据库中随机选择)以及除一个(再次随机选择)之外的所有分支以及除一个之外的所有学期(也是随机的选择)。那么,为什么还要显示大学名称以外的其他专栏?也许你只想向大学展示至少一门课程?那么你需要另一个查询。如果您需要了解所有大学所有分校的所有课程的学期 - 这是正确的问题。 –