2012-02-24 114 views
0

我有我的数据库四个表的:支付费用

  • student:包含学生的ID和姓名等
  • student_fee:包含paid_datestudent_id数据fee_id与参考studentfee
  • fee:包含fee_id,费用金额,fee_typeid(裁判fee_type表)
  • fee_type:包含fee_typeid和费用型 - 入会费,每月的学费,罚款,统一收费等

如何我是否显示已支付入场费的学生(或fee_typeid收取入场费)以及未付费的学生?

嗯..英语不是我的第一语言;)

+0

SELECT student.name FROM学生 LEFT JOIN student_fee ON student.student_id = student_fee.student_id 左连接上student_fee.fee_id = fee.fee_id 费留在fee.feetype_id = fee_type.feetype_id 加入fee_type WHERE fee_type。 feetype_id ='4'和student_fee.student_id不是NULL我用它来检索已付费的人,但是当我使用IS NULL时,我无法检索没有付款的名字 – Slopar 2012-02-24 17:36:42

+0

不是一个非常具有描述性的标题。 (不是我downvote) – 2012-02-24 17:36:47

+0

对不起回合 – Slopar 2012-02-24 17:39:35

回答

0
SELECT * FROM student WHERE student_id IN 
    (
     SELECT student_id FROM student_fee WHERE fee_id IN 
      (
       SELECT fee_id FROM fee WHERE fee_typeid=? 
      ) 
    ) 

我相信这是你所需要的。这是在没有实际编写连接语法的情况下做join的一种方法。

基本上,你选择所有fee_id他们是你想要的类型。然后,您正在选择所有student_id,其中fee_id与您刚才选择的那个匹配。最后,你将所有关于学生的信息都提交给他们,他们的学生号是是你刚才拉的ID。

+0

这工程..很好只是想知道为什么IS NULL不工作...非常感谢 – Slopar 2012-02-24 17:40:14