2017-08-11 76 views
0

您好我有以下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查詢我收到一個錯誤,指出多行返回

我能問爲什麼/有指導

其他問題還沒有真正幫助我說實話

+0

我覺得你的意思是;選擇'公司','類型','代碼'從'位置'中的代碼( 選擇代碼FROM米WHERE'米'.'位置代碼'= location.code AND米。代碼NOT IN( SELECT meter_code FROM reading )) Mysql現在期望第一個子查詢的結果是true或false,而不是代碼集合。 – Dennisvdh

+0

在某個位置可以有1米多的距離嗎? – xQbert

+0

@xqbert不。我正在閱讀,它應該是理想的內部加入其他答案,但他們似乎都很混亂 – ManMetWebTek

回答

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)) 
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 

需要測試每一個以找出最適合您的需求的性能。每個表中的記錄數量指標和數據分佈都可能改變其中每一個的性能。我偏向最後一個,然後從維護角度來看第一個,但它可能是最糟糕的表現。

+0

卡住了一個星期!救主。謝謝。 – ManMetWebTek