2012-08-30 54 views
0

我試圖得到JOIN表後,我得到的結果從SELECT與COALESCEMySQL的 - 使用效果加入

SELECT 
    COALESCE(
      (
       SELECT 
         relocations.location_id 
       FROM 
         relocations 
       WHERE 
         parts.id=relocation.part_id 
       ORDER BY 
         relocations.date_moved 
       DESC 
       LIMIT 
         1 
      ) 
      , 
      parts.location_id 
     ) AS locationId, 
    locations.name 
FROM 
    parts 
JOIN 
    locations ON locations.id=locationId 

但是查詢是無效的和MySQL告訴我locationId是未知列COALESCE 。我怎麼能解決這個問題?

表結構

[部件] ID | location_id

[Relocations] id | location_id | date_moved

[地區] id |名稱

+0

表結構?查詢的目的是什麼? – eggyal

+0

請發佈架構。我無法分辨你指的是哪個'locationid'。 – Kermit

+0

@eggyal查看更新後的帖子。目的是爲了抓取部件的最新位置(如果它已被重新定位)(這可能看起來很奇怪,但我不得不取消原來的查詢以使其更易於使用)。 – user1627928

回答

2

如果我理解正確,您正嘗試加入COALESCE列。試試這個:

SELECT a.locationId, locations.name FROM 
    (SELECT 
     COALESCE(
        (
        SELECT 
          relocations.location_id 
        FROM 
          relocations 
        WHERE 
          parts.id=relocation.part_id 
        ORDER BY 
          relocations.date_moved 
        DESC 
        LIMIT 
          1 
       ) 
       , 
       parts.location_id 
      ) AS locationId 
    FROM 
     parts) a 
JOIN locations ON locations.id=a.locationId 
+0

我已經調整了一下你的查詢來刪除一個明顯的「MySQL不會接受這個」錯誤,但看作是'a.locationId'是與'locations.id'相同,你可能實際上想要將整個事物重組爲'SELECT id,name FROM locations WHERE id IN(SELECT ...)'。我認爲這會簡單得多。 – ruakh

+0

@ruakh我同意。感謝編輯。 – Kermit

+0

這將花費我一秒的時間來嘗試並將其應用於龐大的查詢中(因爲這只是其中的一部分)。 – user1627928