我使用以下列处理三个表:
我正在尝试加入所有三个表格,以便根据学生表格中的分数,包括评分表格中指定的每个学生的字母等级。我在Python中使用sqlite3库。我写了如下sql语句:
<?php
$Imagesrc = C('Plugin.IndexPostImage.Image','/images/default.png');
preg_match(
'#\<img.+?src="([^"]*).+?\>#s',
$Sender->EventArguments['Post']->Body,
$images
);
$thumbs = "";
for ($i = 1; $i <= 5; $i) {
if(!empty($images[$i])) {
$thumbs .= '<a class="IndexImg" href="' .
$Sender->EventArguments['Post']->Url . '">' .
Img($images[$i], array('title' => $sline, 'class' => "IndexImg")) . '</a>';
} else {
break;
}
}
echo "$thumbs";
但是,我收到了一个错误。错误的最后两行如下:
WHERE s.courseid = c.courseid''')
sqlite3.OperationalError:靠近“FROM”:语法错误
请帮忙
编辑代码:
SELECT s.name, s.courseid, c.name, c.classroom, s.score, CASE g.letter WHEN s.score BETWEEN g.upper AND g.lower
FROM students AS s, courses AS c, gradingscheme AS g
WHERE s.courseid=c.courseid
现在我收到了错误:
ON CASE g.letter当s.score BETWEEN BETWEEN lower and upper''') sqlite3.OperationalError:靠近“upper”:语法错误
可能,我无法弄清楚如何使用CASE语句进行条件连接
答案 0 :(得分:0)
无需案例 - 只需使用“和”
SELECT s.name, s.courseid, c.name, c.classroom, s.score, g.letter
FROM students AS s
INNER JOIN courses AS c
ON s.courseid=c.courseid
INNER JOIN gradingscheme AS g
ON s.score > g.lower AND s.score < g.upper
答案 1 :(得分:0)
您不需要使用case语句过度复杂化查询,只需将连接条件指定为s.score > g.lower AND s.score <= g.upper
。
SELECT s.name, s.courseid, c.name, c.classroom, s.score, g.letter
FROM students AS s
JOIN courses AS c
ON s.courseid=c.courseid
JOIN gradingscheme AS g
ON s.score > g.lower AND s.score <= g.upper
注意上限范围内的<=
运算符小于或等于,因为如果没有这个,则得分为100的人将不会被排名。
使用BETWEEN是危险的,因为它意味着不同数据库中的不同内容。在sqlite中,BETWEEN包括较低和较高范围,这意味着得分90在80和80之间。在90&amp; 90之间也 100.使用这种情况,你会得到两个成绩为90分的学生。通过使用> g.lower and <= g.upper
,您可以安全地将评分方案指定为70-80,80-90,90-100,并确保没有冲突/重叠,因为您已在比较运算符中明确指出。