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
))
MySQL查询我收到一个错误,指出多行返回
我能问为什么/有指导
其他问题还没有真正帮助我说实话
答
我认为你需要使用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))
答
因为你不需要从仪表或仪表代码数据
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
需要测试每一个以找出最适合您的需求的性能。每个表中的记录数量指标和数据分布都可能改变其中每一个的性能。我偏向最后一个,然后从维护角度来看第一个,但它可能是最糟糕的表现。
+0
卡住了一个星期!救主。谢谢。 – ManMetWebTek
我觉得你的意思是;选择'公司','类型','代码'从'位置'中的代码( 选择代码FROM米WHERE'米'.'位置代码'= location.code AND米。代码NOT IN( SELECT meter_code FROM reading )) Mysql现在期望第一个子查询的结果是true或false,而不是代码集合。 – Dennisvdh
在某个位置可以有1米多的距离吗? – xQbert
@xqbert不。我正在阅读,它应该是理想的内部加入其他答案,但他们似乎都很混乱 – ManMetWebTek