嗨,我下面有一个 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/