2012-09-24 33 views
0

我有以下的数据库表和列:MySQL查询为什么我的INNER JOIN组最新结果

students 
+------------+-------------------+------------------+ 
| student_id | student_firstname | student_lastname | 
+------------+-------------------+------------------+ 
|   95 | John    | Doe    | 
+------------+-------------------+------------------+ 

studentcourseplan 
+--------+------------+ 
| cpl_id | student_id | 
+--------+------------+ 
| 209 |   95 | 
| 273 |   95 | 
+--------+------------+ 

studentdates 
+------------+-------------------+-----------------+ 
| student_id | student_startdate | student_enddate | 
+------------+-------------------+-----------------+ 
|   95 | 2012-07-02  | 2012-08-17  | 
|   95 | 2012-08-20  | 2012-11-16  | 
+------------+-------------------+-----------------+ 

如果我运行此查询...

SELECT 
    scp.cpl_id, 
    s.student_id, 
    s.student_firstname, 
    s.student_lastname, 
    sd.student_startdate, 
    sd.student_enddate 
FROM 
    studentcourseplan scp 
     INNER JOIN 
    students s ON s.student_id = scp.student_id 
     INNER JOIN 
    studentdates sd ON sd.student_id = s.student_id 

...我得到的下面的输出:

+--------+------------+-------------------+------------------+-------------------+-----------------+ 
| cpl_id | student_id | student_firstname | student_lastname | student_startdate | student_enddate | 
+--------+------------+-------------------+------------------+-------------------+-----------------+ 
| 209 |   95 | John    | Doe    | 2012-07-02  | 2012-08-17  | 
| 273 |   95 | John    | Doe    | 2012-07-02  | 2012-08-17  | 
+--------+------------+-------------------+------------------+-------------------+-----------------+ 

通知从结果的日期相比较,以在表中studentdates的值。他们错了。我想要类似下面的输出:

+--------+------------+-------------------+------------------+-------------------+-----------------+ 
| cpl_id | student_id | student_firstname | student_lastname | student_startdate | student_enddate | 
+--------+------------+-------------------+------------------+-------------------+-----------------+ 
| 209 |   95 | John    | Doe    | 2012-07-02  | 2012-08-17  | 
| 273 |   95 | John    | Doe    | 2012-08-20  | 2012-11-16  | 
+--------+------------+-------------------+------------------+-------------------+-----------------+ 

我在做什么错?

+1

请检查你的关于你的数据库模式的问题,因为就目前而言,你想在你的查询中实现的关系看起来不对。 –

+0

你是什么意思? – David

+1

你怎么知道'cpl_id 209'属于'start_date'2012-07-02''而不是'2012-08-20'? –

回答

1

您需要将cpl_idstudentdates对应。您可以添加一列到studentdates,称为cpl_id &然后相应地更改查询。

+0

嗯,这不是一个真正的选择。有许多数据需要编辑手册。你知道还有其他的选择吗? – David

+0

如果在你的程序中,开始日期与课程计划(特定课程的开始日期是选择该课程的学生的开始日期)相关,则可以将'startdate'放入'studentcourseplan'中创建另一个列。这可能会减少手动编辑。 – hemu