如何在mysql中排除基于sql条件的结果?

如何在mysql中排除基于sql条件的结果?,mysql,sql,codeigniter,Mysql,Sql,Codeigniter,我正在使用Codeigniter和MySQL创建一个工作应用程序门户。我有以下表格: 作业-其中包含作业列表 学生-其中包含学生列表 作业申请-包含学生申请的作业列表 工作 主键:作业id 列:作业id、作业名称 学生 主键:学生id 列:学生id、学生姓名、学生电子邮件 就业申请 主键:作业\u应用\u id 外键:工作id,学生id 列:工作id、学生id、状态、申请日期 在我的应用程序中,当用户申请作业时,我会更改“应用于挂起的作业”中的“状态”列。我想从列表中删除应用的作业 到目前为止,

我正在使用Codeigniter和MySQL创建一个工作应用程序门户。我有以下表格:

作业-其中包含作业列表 学生-其中包含学生列表 作业申请-包含学生申请的作业列表 工作 主键:作业id

列:作业id、作业名称

学生 主键:学生id

列:学生id、学生姓名、学生电子邮件

就业申请 主键:作业\u应用\u id

外键:工作id,学生id

列:工作id、学生id、状态、申请日期

在我的应用程序中,当用户申请作业时,我会更改“应用于挂起的作业”中的“状态”列。我想从列表中删除应用的作业

到目前为止,我使用以下查询来列出作业

SELECT * FROM jobs
我曾经尝试过使用内部联接来对付你申请的工作,但是我被卡住了。我不知道如何把它从名单上排除。我的课程中有学生id


如何创建一个查询,以排除学生使用学生id作为条件申请的作业?

您可以在下面尝试-使用左连接和where条件

  SELECT a.job_id
  FROM jobs a LEFT JOIN jobs_applied b ON a.job_id=b.job_id
  WHERE status IS null

如果我正确理解了你的问题,要保留学生尚未申请的工作列表,请使用

select * from jobs j LEFT JOIN jobs_applied ap on j.job_id=ap.jobs_id where ap.jobs_id is null
请试试这个

SELECT * FROM jobs Where Job_Id not in (Select job_id from jobs_applied where ISNULL(status,'') ='') 

您可以选择您想要的学生在申请表中未找到的所有工作。imho使用subselect的最简单方法如下:

SELECT * FROM jobs as j
WHERE j.job_id NOT IN (
 SELECT job_id FROM jobs_applied WHERE student_id IN (<student_id>)
);

您希望对针对特定学生应用的jobs_进行左连接,如果没有匹配项,jobs_applied.*将为空,因此这是您的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 |
+--------+

我想显示作业列表,但用户已应用的作业除外。在您的查询中没有学生id,请您添加一些示例数据和表格式的预期输出,这样就很容易理解您希望@Bearnithi如何创建一个查询,以排除学生使用学生id作为条件申请的作业?很抱歉,我不知道如何创建有问题的表视图。我想显示作业列表,但学生已经申请的作业除外。在您的查询中没有学生id。您在jobs中是否有学生id?您能列出表中的所有列吗?jobs、students和jobs_applied?我想显示除学生已经申请的jobs之外的jobs列表。在您的查询中没有学生id。