您好我在下面有一个mysql查询
MyProject
module1
module2
我收到错误消息,说明返回了多行
我可以问为什么/有指导
其他问题并没有真正帮助我说实话
答案 0 :(得分:1)
由于您不需要来自仪表或仪表代码的数据
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
)
或保持使用存在的主题(这避免了不同的性能影响并避免了连接;但是不存在可能会很慢。
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
需要测试每个以找到最适合您需求的性能。每个表中的记录计数索引和数据分布都可以改变每个表的性能。我偏向最后一个,然后从维护的角度来看第一个,但它可能是性能最差的。
答案 1 :(得分:0)
我认为您需要使用EXISTS
运算符:
SELECT `company`,`type`,`code`
FROM `location`
WHERE EXISTS (SELECT code
FROM meter
WHERE `meter`.`location_code` = location.code AND
meter.code NOT IN (SELECT meter_code FROM reading))