2017-10-17 86 views
0

我想在MYSQL中編寫查詢。我有一張名爲student_data的表格。它有4列。查詢從地圖列表中檢索mysql的數據

student_data_id 
student_id 
course_name 
registerd_time 

我想要檢索爲每個學生註冊的課程。我使用了下面的查詢。

select 
    student_id,course_name from student_data 
where 
    student_id IN(2224508,22260211) and 
    course_name IN('Java','Salesforce','Unix','VBScript') and 
    registered_time > NOW() - INTERVAL 1 DAY 
group by student_id,course_name; 

我得到以下的輸出:

2224508  Java 
2224508  Salesforce 
2224508  Unix 
22260211 Java 
22260211 Salesforce 
22260211 VBScript 

我試圖讓這種格式輸出:

2224508  Java,Salesforce,Unix 
22260211 Java,Salesforce,VBScript 

如何編寫一個查詢或JDBC模板來獲得以上格式?

回答

1

試試這個 -

select student_id 
     ,GROUP_CONCAT(course_name) 
from student_data 
where student_id IN(2224508, 22260211) 
and course_name IN('Java','Salesforce','Unix','VBScript') 
and registered_time > NOW() - INTERVAL 1 DAY 
group by student_id; 
+0

它爲我工作。非常感謝您的快速回復。它的工作原理是 – madhu

1

可以使用GROUP_CONCAT()做到這一點:

select 
    student_id,group_concat(course_name) 
from student_data 
where 
    student_id IN(2224508,22260211) and 
    course_name IN('Java','Salesforce','Unix','VBScript') and 
    registered_time > NOW() - INTERVAL 1 DAY 
group by student_id; 
+0

。非常感謝。 – madhu

2

功能GROUP_CONCAT concats A組(在這種情況下student_id數據)用默認的分隔符,

select 
    student_id 
    , GROUP_CONCAT(course_name) 
from student_data 
where 
    student_id IN(2224508,22260211) and 
    course_name IN('Java','Salesforce','Unix','VBScript') and 
    registered_time > NOW() - INTERVAL 1 DAY 
group by student_id;