我有下面的book张表

id time teacher book class
1 22-05-25 03:20:39 21 null 1
2 22-05-25 03:20:39 21 7853 2
3 22-05-25 03:20:39 21 7854 2
4 22-05-25 03:20:39 21 7855 2
5 22-05-25 03:20:39 21 7856 2

和以下SQL

SELECT t0_.*    
FROM book t0_
    LEFT JOIN book t1_ ON (t0_.teacher= t1_.teacher AND t0_.id < t1_.id)
WHERE
    t0_.book IS NOT NULL AND
    t0_.teacher IN (21) AND
    t1_.id IS NULL;

这就像预期的一样,返回id 5.但当t0_.book IS NOT NULL改为t0_.book IS NULL时,我得到的是空白结果,而不是id 1.所以我try 了另一种方法

SELECT t0_*, MAX(t0_.id) AS uid
FROM book t0_
WHERE
    t0_.book IS NOT NULL AND
    t0_.teacher IN (21) AND
GROUP BY t0_.time

这次我得到了id 2而不是id 5.

EDIT:

在书本为空的情况下,我如何才能在每个班级找到最好的老师?我不知道是否需要进一步澄清.

推荐答案

您需要将t1_限制为book = NULL的其他行.否则,您将把空行与非空行连接起来,并且始终存在匹配项,因此t1_.id IS NULL判断将失败.

将条件AND t1_.book IS NULL添加到ON条件.

SELECT t0_.*    
FROM book t0_
    LEFT JOIN book t1_ ON (t0_.teacher= t1_.teacher AND t0_.id < t1_.id) 
        AND t1_.book IS NULL
WHERE
    t0_.book IS NULL AND
    t0_.teacher IN (21) AND
    t1_.id IS NULL;

DEMO

Mysql相关问答推荐

MySQL 8.0.28覆盖(和函数)索引未使用

SQL/Pyspark -判断条件

MySQL多次联接同一个表使计数变得奇怪

版本升级到5.0.0后在QueryDSL中使用Enum时出错

如何在sql中包含0作为计数?

Select 同一张表中的结果数?

如何将数据导入MySQL中的master/replica struct

仅计算 DATEDIFF (MySQL) 中的工作日

如何同时从同一个表中 Select 从 SQL 表中删除行

在 Spring Data jpa 中的 @Query 中无法识别本机查询

SQL 根据多行值获取记录

SQL从具有相同列的行中 Select 最后一行

MYSQL LOAD DATA INFILE 语句适用于工作台,但不适用于 python

Select 在同一天售出不同活动门票的收银员

从 MYSQL 查询中计算列的平均值

org.hibernate.InstantiationException:没有实体的默认构造函数::principal.Cliente

如何删除没有临时表的 MySQL 表中的所有重复记录

phpmyadmin没有收到要导入的数据错误,如何解决?

MySQL 导出到 outfile:CSV 转义字符

将 Blob 转换为字节数组的最简单方法