【问题标题】:MySQL query why does my INNER JOIN group date resultMySQL 查询为什么我的 INNER JOIN 组日期结果
【发布时间】:2012-09-15 14:59:43
【问题描述】:

我有以下数据库表和列:

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      |
+--------+------------+-------------------+------------------+-------------------+-----------------+

我做错了什么?

【问题讨论】:

  • 请检查您对数据库架构的问题,因为就目前而言,您希望在查询中实现的关系看起来是错误的
  • 你怎么知道cpl_id 209属于start_date '2012-07-02'而不属于'2012-08-20'
  • @Grisha 哦。没想到,谢谢指出!

标签: mysql date join


【解决方案1】:

您需要将cpl_id 映射到studentdates。您可以向studentdates 添加一列,名为 cpl_id,然后相应地更改查询。

【讨论】:

  • 嗯,这不是一个真正的选择。有很多数据需要手动编辑。你知道其他选择吗?
  • 如果在您的课程中,开始日期与课程计划相关(意味着特定课程的开始日期是学生选择该课程的开始日期),您可以将startdate 放入studentcourseplan 创建一个更多专栏。这可能会减少手动编辑。
猜你喜欢
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 2015-09-03
相关资源
最近更新 更多