您想参考特定学生对 jobs_applied 进行 LEFT JOIN,如果没有匹配项,jobs_applied.* 将为 NULL,这就是您的 WHERE 条件。
这是一个演示:
mysql> CREATE TABLE `jobs` (
-> `job_id` int NOT NULL,
-> PRIMARY KEY (`job_id`)
-> );
mysql> INSERT INTO `jobs` VALUES (11),(22);
mysql> CREATE TABLE `students` (
-> `student_id` int NOT NULL,
-> PRIMARY KEY (`student_id`)
-> );
mysql> INSERT INTO `students` VALUES (100),(200);
mysql> CREATE TABLE `jobs_applied` (
-> `jobs_applied_id` int NOT NULL,
-> `job_id` int DEFAULT NULL,
-> `student_id` int DEFAULT NULL,
-> `status` int DEFAULT NULL,
-> PRIMARY KEY (`jobs_applied_id`),
-> KEY `job_id` (`job_id`),
-> KEY `student_id` (`student_id`),
-> CONSTRAINT `jobs_applied_ibfk_1` FOREIGN KEY (`job_id`) REFERENCES `jobs` (`job_id`),
-> CONSTRAINT `jobs_applied_ibfk_2` FOREIGN KEY (`student_id`) REFERENCES `students` (`student_id`)
-> );
mysql> INSERT INTO `jobs_applied` VALUES (1,11,100,NULL),(2,22,200,NULL);
学生 100 申请了工作 11,因此他应该在后续查询中只看到工作 22。
mysql> SELECT j.*
-> FROM jobs j LEFT JOIN jobs_applied ap
-> ON j.job_id = ap.job_id AND ap.student_id = 100
-> WHERE ap.job_id IS NULL;
+--------+
| job_id |
+--------+
| 22 |
+--------+
同样,学生 200 申请了工作 22,因此她应该只能看到工作 11。
mysql> SELECT j.*
-> FROM jobs j LEFT JOIN jobs_applied ap
-> ON j.job_id = ap.job_id AND ap.student_id = 200
-> WHERE ap.job_id IS NULL;
+--------+
| job_id |
+--------+
| 11 |
+--------+