使用php或sql在两个mysql表中使用选定的字段值获取不同的元素

zrfyljdw  于 2021-06-25  发布在  Mysql
关注(0)|答案(3)|浏览(273)

假设sql中有两个表具有几乎相同的值,其中第一个表可视为完整数据,第二个表具有选择性数据。我需要得到第一个表中的数据,它不是第二个表的一部分。但是这里我需要比较两个表中的选择性行

total_students (s_id, s_name, s_class) 
failed_students (s_id, s_name, s_class)

我只需要得到一份学生名单,名单上的学生是在表中的学生,但不在失败的学生只有一个特定的类。
我试着用 array_diff() 在参数化查询的结果上,从两个表中选择查询,但不能,因为结果是对象形式的。此外,对于这样的逻辑,我将不得不发出多个查询。
还尝试使用下面的查询用sql解决相同的问题

SELECT * 
FROM total_students 
LEFT OUTER JOIN failed_students ON total_students.s_id = failed_students.s_id 
WHERE total_students.s_id IS NULL 
  AND total_students.s_class = "fourth";

但这也无济于事。
请推荐一种使用php或sql高效实现它的方法(首选)。

q7solyqu

q7solyqu1#

只是找到了一个更简单的解决方案

select * from total_students where class="fourth" and s_id not in (select s_id from failed_students where class="fourth");

这似乎对我有效,但不确定这在所有情况下都是有效的。

eblbsuwk

eblbsuwk2#

oracle-minus获取2个数据集,并提供差异。

SELECT s_id,s_name,s_class FROM total_students where total_students.s_class="fourth"
MINUS
SELECT s_id,s_name,s_class FROM failed_students where failed_students.s_class="fourth"

还有另一种方式。您想检查失败的学生id是否为空(假设这是一个键)

SELECT * 
FROM total_students 
      LEFT OUTER JOIN failed_students 
      ON total_students.s_id = failed_students.s_id 
WHERE failed_students.s_id IS NULL AND total_students.s_class="fourth";
sqougxex

sqougxex3#

你要找的是总学子中不及格的学子,所以你的 WHERE 条件应在 failed_students 表,不在学生总数上:

SELECT * 
FROM total_students 
      LEFT OUTER JOIN failed_students 
      ON total_students.s_id = failed_students.s_id 

WHERE failed_students.s_id IS NULL
  AND total_students.s_class = 'fourth';

相关问题