计算行数与其他表中的某些条件不匹配

时间:2017-11-22 10:37:17

标签: mysql

students_records

+----+-----+-----+ 
| Sr | SRN | ARN |
+----+-----+-----+
| 1  | ge  | aj  |
| 2  | ge  | bd  |
+----+-----+-----+  

答案

+----+-----+-----+
| Sr | SRN | ARN |
+----+-----+-----+
| 1  | ge  | aj  |
| 2  | ge  | aj  |
| 3  | ge  | ne  |
| 4  | ge  | bd  |
+----+-----+-----+  

我需要计算rows的表answerARN value of answer is not equal (!=) to any ARN value of students_records的数量。

对于上述数据库,计数将 1 ,因为答案中的 a2 不在students_records的任何ARN行中。

1 个答案:

答案 0 :(得分:0)

早上好,这是一个有效的查询:

SELECT count(*)
FROM answer AS a
LEFT JOIN student_records AS s ON a.Sr = s.Sr
WHERE s.Sr IS NULL

说明:

  • 其他一些数据库有一个关键字EXCEPT,其他数据库有MINUS,它确实提供了一组中不在另一组中的结果。 MySQL没有。
  • 要执行类似的操作,请执行LEFT JOIN并过滤空行。
  • 让我们构建查询:

    SELECT *
    FROM answer AS a
    LEFT JOIN student_records AS s ON a.Sr = s.Sr
    

    你会得到这个:

    Sr   SRN   ARN   Sr    SRN   ARN
    1    s1    a1    1     s1    a1
    2    s1    a2    2     s1    a3
    3    s1    a3    null  null  null
    

    然后添加WHERE行,你得到这个:

    Sr   SRN   ARN   Sr    SRN   ARN
    3    s1    a3    null  null  null
    

    最后,将SELECT更改为COUNT(*),得到1。

顺便说一下,当我开始处理你的问题时,我没有CLUE如何做到这一点。然后谷歌帮助了,我发现了这个:http://www.gokhanatil.com/2010/10/minus-and-intersect-in-mysql.html

研究你的朋友!