在“子程序”关系的“出勤”列中,分别有1和0,分别表示存在和不存在。如何选择缺席至少2次的学生? (对于这种情况,汉娜和乔阿什)。被选中的学生将显示在“电子邮件”中。
SELECT DISTINCT Concat('Dear Mr and/or Mrs ', C.lastname,
', we are writing concerning your child’s attendance. ',
C.firstname, ' was absent from the subject ', CP.programid,
' for at least 2 lessons.') 'Content of Email'
FROM child C,
childprogram CP
WHERE C.firstname = CP.firstname
答案 0 :(得分:1)
您可以为此使用GROUP_BY HAVING
。
SELECT C.EMAIL, C.LAST_NAME, C.FIRST_NAME, COUNT(*) as DAYS_OFF
FROM CHILD C
JOIN CHILDPROGRAM CP
ON C.FIRSTNAME = CP.FIRSTNAME
WHERE ATTENDANCE = 0
GROUP BY C.LAST_NAME, C.FIRST_NAME
HAVING COUNT(*) > 1
显然可以根据需要更改选择,但这将为您提供缺席的名称和天数,并且只包括缺席超过一天的孩子。
另一方面,使用FIRSTNAME作为孩子的钥匙有明显的问题(您不能处理2个同名孩子)。我不确定您拥有多少控制权,但可能结合使用电子邮件和名字会更好。这也意味着在CHILDPROGRAM表上也有EMAIL。那或者只是创建一个ID字段,您可以将其用作外键。