因爲你不需要從儀表或儀表代碼數據
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
需要測試每一個以找出最適合您的需求的性能。每個表中的記錄數量指標和數據分佈都可能改變其中每一個的性能。我偏向最後一個,然後從維護角度來看第一個,但它可能是最糟糕的表現。
我覺得你的意思是;選擇'公司','類型','代碼'從'位置'中的代碼( 選擇代碼FROM米WHERE'米'.'位置代碼'= location.code AND米。代碼NOT IN( SELECT meter_code FROM reading )) Mysql現在期望第一個子查詢的結果是true或false,而不是代碼集合。 – Dennisvdh
在某個位置可以有1米多的距離嗎? – xQbert
@xqbert不。我正在閱讀,它應該是理想的內部加入其他答案,但他們似乎都很混亂 – ManMetWebTek