mysql - 左加入学生付款

标签 mysql left-join

我这里有个问题。我有4张表,分别是:students, fee, payments and class

学生

(student_id, firstname, lastname, cellphone, email, address, photofile, class_id)

(class_id, class_description, class_date, class_venue)

付款

(payment_id, student_id, payment_date, payment_amount, fee_id)

费用

(fee_id, fee_description, class_id, fee_amount)

基本上,我需要创建一个查询,该查询能够显示学生是否根据 进行了付款 费用。但是,我已经尝试了从 stackoverflow 获得的所有左连接,但仍然无法获得我想要的结果。

我有这个:

SELECT 
students.student_id, fee.fee_id, fee.fee_description,
fee.class_id, fee.fee_amount, students.firstname, students.lastname,
payments.payment_id, payments.payment_date 

FROM students 
LEFT JOIN class ON students.class_id = class.class_id 
LEFT JOIN fee ON fee.class_id = class.class_id 
LEFT JOIN payments ON payments.student_id = students.student_id

然后我得到如下结果:

+-----------+--------+---------------------+-----------+-------------+-----------+----------+------------+--------------+
|student_id | fee_id | fee_description     | class_id  | fee_amount  | firstname | lastname | payment_id | payment_date |
+-----------+--------+---------------------+-----------+-------------+-----------+----------+------------+--------------+
|     1     |   1    | Secondary Malay@Dec |     1     |     50      |  Bob      |   Smith  |     1      | 2013-12-18   |
|     1     |   1    | Secondary Malay@Dec |     1     |     50      |  Bob      |   Smith  |     11     | 2013-12-27   |
|     1     |   5    | Secondary Malay@Jan |     1     |     50      |  Bob      |   Smith  |     1      | 2013-12-18   |
|     1     |   5    | Secondary Malay@Jan |     1     |     50      |  Bob      |   Smith  |     11     | 2013-12-27   |
|     2     |   2    | Primary Eng@Dec     |     2     |     35      |  Joe      |   Doe    |     10     | 2013-12-02   |
|     11    |   1    | Secondary Malay@Dec |     1     |     50      |  Bryant   |   Quan   |     8      | 2013-12-19   |
|     11    |   5    | Secondary Malay@Jan |     1     |     50      |  Bryant   |   Quan   |     8      | 2013-12-19   |
+-----------+--------+---------------------+-----------+-------------+-----------+----------+------------+--------------+

问题:

  • 学生 (Bob Smith) 出现了 4 次(应该只出现两次 - 12 月和 1 月费用)。
  • 学生 (Bryant Quan) 只支付了 12 月的费用,但查询显示他也支付了 1 月的费用。
  • payment_id 应该是唯一的,因此不能出现超过 1 次。

目前,我正在使用 Flash Builder 开发移动应用程序。该应用程序用于跟踪学生的付款,因此,我需要先解决此问题,然后再进行其他操作。如果有人知道如何,请指导我完成此操作。提前谢谢你><"

mysql源代码在这里:http://sqlfiddle.com/#!2/d4482a

最佳答案

在 feeid 上加入付款和费用表,应该会给您正确的结果

编辑:

SELECT 
students.student_id, fee.fee_id, fee.fee_description,
fee.class_id, fee.fee_amount, students.firstname, students.lastname,
payments.payment_id, payments.payment_date 

FROM students 
LEFT JOIN class ON students.class_id = class.class_id 
LEFT JOIN fee ON fee.class_id = class.class_id 
LEFT JOIN payments ON payments.student_id = students.student_id and Payments.fee_id = fee.fee_id

这会给你所有已经支付和未支付的学生 您可以根据需要使用 where payment_id is null 或 is not null 对其进行过滤 如果 payment_id 为 null,则表示他们尚未付款,否则已付款

关于mysql - 左加入学生付款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20811919/

相关文章:

mysql - 如何加入多个 count(*) 查询?

R:结合 lapply 和 left_join 有条件地合并数据帧

sql - 有没有更有效的方法来编写此 SQL?

php - 无法显示查询结果

php - 个人资料 url 无法获取结果

php - 使用 PHP 将数据插入 MySQL 数据库

php - LEFT JOIN - 排序和分组

mysql - 我们如何区分 LEFT OUTER JOIN 与 Left Join

mysql - 避免Mysql左连接查询中的重复

mysql - 您不能在 FROM 子句中指定要更新的目标表 'wp_mail_queue'