mysql multiple NOT in where 条件基于另一个查询的结果

标签 mysql sql

我有一种情况,我需要从一个表中提取数据,但根据另一个表中的行排除一些行。我的意思是我需要从一张表中提取 studentid,但排除另一张表中的 studentid。

第一次查询:

$sql = "select studentid from table 2 where iarsid = '12'";

因为我将从这个查询中得到一个数组结果,所以我想使用这个结果并将它放在下一个查询的 NOT 条件中,只是从另一个查询的结果中排除这些行。

第二个查询:

$sql2 = "select studentid from table 2, table 3 where iarsid = '12'//and a lot of joins";

根据第二个查询拉出学生时,基本上不需要第一个表中的学生。 如果我使用了错误的逻辑,请指导以实现这一目标。

最佳答案

您至少可以通过 3 种方式实现一般想法,使用 LEFT JOIN,以及使用 NOT IN 和 NOT EXISTS。

通过 LEFT JOINS。

SELECT student_name
FROM table_A a
LEFT JOIN table_B b ON a.student_id = b.student_id
WHERE b.student_id IS NULL

这里获取table_A中的所有学生信息,其中该学生不在table_B中。

这里是通过 NOT EXISTS:

 SELECT student_name
 FROM table_A a
 WHERE NOT EXISTS (SELECT student_id FROM table_B b WHERE b.student_id = a.student_id)

并通过 NOT IN

 SELECT student_name
 FROM table_A a
 WHERE a.student_id NOT IN (SELECT student_id FROM table_B b)

关于mysql multiple NOT in where 条件基于另一个查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14300548/

相关文章:

MySQL 查询不显示最近的用户名

php - 为什么带单引号的字符串在插入数据库时​​会引发错误?

mysql - JOINS 而不是子选择

mysql where IN 语句使用正则表达式?

mysql - 街道地址的最佳标准化是什么?

mysql - 从 MySQL 中所属的所有组中选择用户

mysql - 在 MySQL innodb 中创建具有多个字段的外键约束

c# - MySql 存储过程不工作

php - 使用 mysql_real_escape_string 后在文本区域内显示多行

数据库的 SQL 查询查找学生的 nr