MySQL查询 "more than one row"

标签 mysql

嗨,我下面有一个 mysql 查询

SELECT `company`,`type`,`code` FROM `location` WHERE (
SELECT code FROM meter WHERE `meter`.`location_code`=location.code AND meter.code NOT IN (
SELECT meter_code FROM reading
))

我收到一条错误,指出返回了多行

我可以问为什么/有指导吗

说实话,其他问题并没有真正帮助我

最佳答案

因为您不需要来自仪表或仪表代码的数据

SELECT `company`,`type`,`code` 
FROM `location` 
WHERE EXISTS (SELECT * 
              FROM meter 
              LEFT JOIN Reading R
                on meter.code = R.meter_Code
              WHERE `meter`.`location_code`=location.code 
                and R.meter_Code is null
             )

或者与使用exists的主题保持一致(这可以避免distinct的性能影响并避免连接;但是notexists可能会很慢。

SELECT `company`,`type`,`code` 
FROM location l 
WHERE EXISTS (SELECT * 
              FROM meter m
              WHERE m.location_code=l.code 
                and not exists (SELECT * 
                                FROM READING r
                                WHERE R.meter_Code = m.Code

             )

这就是使用连接来完成的方法,但是不同的和连接似乎成本高昂。不同是必要的,因为我假设一个位置可能有很多米,反之亦然,或者一个米可能有很多读数,导致数据相乘,因此不同;但要付出代价。

SELECT DISTINCT l.company,l.type,l.code
FROM location l
INNER JOIN METER M
 on l.code = m.location_Code
LEFT JOIN reading R
 on R.Meter_Code = m.Code
WHERE r.meter_Code is null

需要对每一项进行测试才能找到最适合您需求的性能。每个表索引中的记录计数和数据分布都可能会改变每个表的性能。从维护的角度来看,我偏爱最后一个,然后是第一个,但它可能是性能最差的。

关于MySQL查询 "more than one row",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45636108/

相关文章:

PHP+Mysql 多表按日期排序(通过左连接)

java - 如何在 JSF 中与 (MySQL) 数据库交互

Python/PyQT QString 不会插入到 MySQL 数据库中

python - Django 按 id 分组然后选择最大时间戳

php - 我如何从数据库中获取并比较相关帖子的时间?

mysql - 插入这些数据最快的方法是什么

MySQL错误1054未知列

php - 安全图片上传 PHP

mysql - 如何在 MySQL 中结合 regex + UPDATE 为 FirstnameLastname 添加空格

python - 尝试使用 mysqldump 导出数据库时,是什么导致 subprocess.call 输出空白文件?