2011-11-29 18 views
0

我收到「錯誤代碼:1054.未知列'E1.extensao'in'field list'」。我改變了表名,但我的查詢如下:加入兩個內聯表 - 未知列?

SELECT E1.stateName, E1.city, E1.boughtEnough, E2.bought 
FROM 
    (SELECT count(DISTINCT idClient),city,stateName FROM 
     (SELECT 
      max(n.ordervalue) as boughtEnough, 
      m.idClient, 
      i.nome AS city, 
      i.id AS cityId, 
      i.stateName 
     FROM Clients c 
     INNER JOIN client_order m ON c.idClient = m.idClient 
     INNER JOIN orders n ON m.client_order = n.client_order 
     INNER JOIN orderDetail p ON n.idorder = p.idorder 
           AND p.idCurso = m.idCurso 
     INNER JOIN cities i ON c.city = i.id 

     WHERE 
      m.idCurso = '10' 
     GROUP BY 
      m.idClient, 
      i.nome, 
      i.id, 
      i.stateName 
     HAVING max(n.orders) >= 6) t 
    GROUP BY t.city, t.stateName 
    ORDER BY t.stateName,t.city) E1 
JOIN (SELECT count(DISTINCT idClient),city,stateName FROM 
     (SELECT 
      count(n.ordervalue) as bought, 
      m.idClient, 
      i.nome AS city, 
      i.id AS cityId, 
      i.stateName 
     FROM Clients c 
     INNER JOIN client_order m ON c.idClient = m.idClient 
     INNER JOIN orders n ON m.client_order = n.client_order 
     INNER JOIN orderDetail p ON n.idorder = p.idorder 
           AND p.idCurso = m.idCurso 
     INNER JOIN cities i ON c.city = i.id 

     WHERE 
      m.idCurso = '10' 
     GROUP BY 
      m.idClient, 
      i.nome, 
      i.id, 
      i.stateName 
     HAVING ((max(n.orders) < 6) AND (count(n.orders) >= 1))) t 
    GROUP BY t.city, t.stateName 
    ORDER BY t.stateName,t.city) E2 ON E1.cityId = E2.cityId 

我更習慣於SQL Server,而不是MySQL。我錯了什麼?

+0

E1.extensao似乎不會出現在您的查詢任何地方。你確定錯誤信息來自這個查詢嗎? –

+0

我可能會錯過一些東西,但我不確定't'應該放在HAVING線上。 –

+0

@TomvanderWoerdt - 這是替代選擇我認爲 – JNK

回答

3

我認爲E1.extensao意味着E1.boughtEnough?在E1是如何定義仔細一看:

(SELECT count(DISTINCT idClient),city,stateName FROM 
     (SELECT 
      max(n.ordervalue) as boughtEnough, 
     ...) t 
    ...) E1 

有一個t.boughtEnough,但你沒有「傳遞了」以E1

+0

如果這是真的,這篇文章應該被合併到社區維基作爲一個例子,爲什麼你不應該在發佈之前翻譯你的代碼。 –

+0

@TomvanderWoerdt:我一致同意。是的,如果你把它搞砸了,那麼風險很大,但是如果你做得對,它可以使英語人士的查詢更清晰。 (葡萄牙語標識符幾乎與自我記錄代碼完全相反,至少對於我們這些不會說葡萄牙語的人來說)至少對於我們這些不會說葡萄牙語的人來說是這樣。問題當然是,很容易搞砸了,例如(在這個情況)通過不翻譯錯誤消息匹配;但是OP通過直截了當地說明他已經改變了標識符來緩和這一點。 – ruakh