2016-08-01 13 views
-4

私は、college_list、course_list、branch_list、semester_listの4つのテーブルを持っています。これらのテーブルにJOINを適用しました。mysqlのDISTINCTレコードを4つのテーブルで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 1 Colleges 1College 1College 1College 2 ... "など...しかし、私は別の大学名、すなわち" College 1 College2 "だけを欲しいです。 –

+0

それでは、clg_nameでグループ化してください。しかし、あなたは1つを除いてすべてのコースを失います(あなたはデータベースによってランダムに選択されます)、そして1つを除くすべてのブランチ(やはりランダムに選ばれた)、そして1つを除くすべての学期選択された)。だから、なぜ大学名以外の欄も見せないのですか?少なくとも1つのコースを持つカレッジだけを見せたいですか?次に別のクエリが必要です。すべてのカレッジの全支部のすべてのコースの学期を知る必要がある場合は、これが正しい質問です。 –

関連する問題