我有一种情况,我需要从一个表中提取数据,但根据另一个表中的行排除一些行。我的意思是我需要从一张表中提取 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/