我有一张'学生'表和'出勤'表 如果学生缺席,我只需在考勤表中输入学生证和日期。 现在我想要检索所有学生和他们在特定日期的出勤率 但是,当我尝试离开加入时,它会向我提供特定日期缺席的特定学生的数据
表'学生'结构和样本数据:
id|name (varchar field)
1 |xxx
6 |yyy
表'出勤'结构和样本数据:
id|date (date field)|student_id (integer field)
1 |2015-10-15 | 1
1 |2015-10-16 | 6
我的查询
SELECT *
FROM student.id, student.name, attendance.date
LEFT JOIN attendance
ON student.id = attendance.student_id
WHERE attendance.date = '2015-10-15'
输出
1 xxx 2015-10-15
但是必需的输出是
1 xxx 2015-10-15
6 yyy NULL (or a blank)
答案 0 :(得分:1)
对于您希望的输出,您需要将条件myApp.directive('notOnMobile', function($compile) {
// Perform detection.
// This code will only run once for the entire application (if directive is present at least once).
// Can be moved into the compile function if detection result needs to be passed as attribute.
var onMobile = false;
return {
terminal:true,
priority:1001,
compile: function compile(tElement, tAttrs) {
if (!onMobile) tElement.attr(tAttrs.notOnMobile, '');
tElement.removeAttr('not-on-mobile');
return function postLink(scope, element) {
$compile(element)(scope);
};
}
};
});
从attendance.date = '2015-10-15'
子句移动到WHERE
子句:
ON
在这种情况下,将在加入期间使用日期。如果在SELECT student.id, student.name, attendance.date
FROM student
LEFT JOIN attendance
ON student.id = attendance.student_id AND attendance.date = '2015-10-15'
子句中使用它,则在数据加入后进行过滤,因此过滤掉所需输出的第二行
这是展示解决方案的SQL Fiddle
答案 1 :(得分:0)
您缺少主表。您需要将FROM
移动到SELECT
部分的末尾,然后实际命名表格
SELECT *, student.id, student.name, attendance.date
FROM student
LEFT JOIN attendance
ON student.id = attendance.student_id
WHERE attendance.date = '2015-10-15'