首页 > SQL:如何使用尽可能简单的方式实现这个SQL语句呢?

SQL:如何使用尽可能简单的方式实现这个SQL语句呢?

创建电池表

CREATE TABLE battery (
    id INTEGER AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(64)
);

插入电池数据

INSERT mysql.`battery`(`name`) VALUES('Battery1'),('Battery2'),('Battery3'),('Battery4'),('Battery5');

结果如下

插入日志表

CREATE TABLE record (
    id INTEGER ,
    charge INTEGER
);

插入日志数据

INSERT mysql.`record` VALUES (1,2),(1,3),(1,2),(2,10),(2,3);

结果如下

日志表数据表示电池1分别被充电2小时、3小时、1.5小时,电池2分别被充电10小时、3小时

没有充电记录,或没有被一次性充电超过8小时的电池都是有问题的电池(可知只有电池2是没有问题的)

我能首先想到的是使用一个左外连接找出没有日志的电池

SELECT * FROM mysql.battery b LEFT JOIN mysql.record r ON b.`id` = r.`id`;

结果如下

可以看出Battery3、Battery4、Battery5没有充电记录所以是有问题的,但Battery1没有一次充电超过8小时,所以也是有问题的,若想简便的将以上有问题的电池都找出来,不使用存储过程之类的话该如何实现呢,求教思路...


select * from battery as b
left join (
select id, sum(charge) as sc from record group by id
) as rj on b.id=rj.id
where rj.sc<8 or rj.id is null
【热门文章】
【热门文章】