Am试图比较两个不同表中的数据,方法是返回第一个表中的所有数据,然后选择第二个表中的可用数据(如果有的话)。
我的主要目的是检查学生是否已注册课程,如果可以,我将显示一些要指示的内容。下面是我的表结构和尝试。
课程
course_name | course_code
------------------------|---------------------------------
VUE | VUE101
OBJECTIVE C | OBJ101
Java | JAVA1
PHP | PHP101
HTML | HTML5
PYTHON | PYT101
SWIFT | SWT101
SQL | SQL101
HACKZA |HK101
student_courses
course_codes | student_id
--------------------|---------------------------
VUE | peter123
SWIFT | peter123
SQL | peter123
/ 尝试的SQL查询 /
//Query One
SELECT * FROM courses cs
LEFT OUTER JOIN student_courses scs
ON cs.course_code = scs.course_codes
WHERE scs.student_id = 'peter123'
//Query Two
SELECT * FROM courses cs
LEFT OUTER JOIN student_courses scs
ON cs.course_code = scs.course_codes
WHERE scs.student_id = 'john123'
/*//PHP Example
foreach($result as $row){
if($row->course_code == $row->course_codes){
echo $row->course_code . ' ENROLLED'
}else{
echo $row->course_code;
}
}*/
/ 预期结果查询一次 /
VUE ENROLLED
OBJECTIVE C
Java
PHP
HTML
PYTHON
SWIFT ENROLLED
SQL ENROLLED
HACKZA
/ 预期结果查询二 /
VUE
OBJECTIVE C
Java
PHP
HTML
PYTHON
SWIFT
SQL
HACKZA
答案 0 :(得分:1)
您只需一个查询就可以实现。
SELECT course_code,
CASE WHEN course_codes != '' THEN 'ENROLLED' ELSE '' END AS STS
FROM courses
LEFT JOIN student_courses ON (student_courses.course_codes = courses.course_code);
答案 1 :(得分:1)
您可以使用
Select course_name,
CASE WhEN course_name in (
Select course_codes From student_courses where student_id = 'peter123') Then 'Enrolled'
ElSE ''
End
From courses;
接收
VUE Enrolled
OBJECTIVE C
Java
PHP
HTML
PYTHON
SWIFT Enrolled
SQL Enrolled
HACKZA
您不了解的第二个查询
答案 2 :(得分:0)
您需要将条件从WHERE移到ON子句:
SELECT
cs.course_name,
case when scs.student_id is not null then 'ENROLLED' end AS ischeck
FROM courses cs
LEFT OUTER JOIN student_courses scs
ON cs.course_name = scs.course_codes AND scs.student_id = 'peter123'
我加入cs.course_name
而不是cs.course_code
来完成这项工作,但是我认为在您发布的样本数据中,错误地将两列分配给了该数据。如果是这种情况,请更改为ON cs.course_code = scs.course_codes
请参见demo。
结果:
| course_name | ischeck |
| ----------- | -------- |
| VUE | ENROLLED |
| SWIFT | ENROLLED |
| SQL | ENROLLED |
| OBJECTIVE C | |
| Java | |
| PHP | |
| HTML | |
| PYTHON | |
| HACKZA | |