2012-09-07 70 views
0

我面臨一個奇怪的情況與SQL查詢MySQL 5.1.41環境在Ubuntu機器上。子查詢 - 在子句列不可見

中的代碼

SELECT spedizione0_.idspedizione, 
    spedizione0_.*, 
    (
     SELECT COUNT(n.idnegozio) 
     FROM negozio n 
     LEFT JOIN confezione c 
      ON n.idnegozio = c.idnegozio 
       AND c.idspedizione = spedizione0_.idspedizione 
     WHERE n.datainizio <= spedizione0_.dataspedizione 
      AND n.datafine >= spedizione0_.dataspedizione 
      OR c.idspedizione != 0 
     ) AS formula5_ 
FROM orocashgenerico.spedizione spedizione0_ 
ORDER BY spedizione0_.dataspedizione DESC 

在這種情況下,錯誤說:[錯誤] 1054 - 未知列 'spedizione0_.idspedizione' 在 '關於條款'

只有這樣,才能運行此查詢是將..上n.idnegozio = c.idnegozio和c.idspedizione = spedizione0_.idspedizione更改爲上n.idnegozio = c.idnegozio和c.idspedizione = 12

對我來說最奇怪的事情是:如果我移動和條件到where子句查詢運行正確,cource的結果不是我所指出的。

我的問題是問題在哪裏?是什麼與MySql版本有關?

感謝advange 啤酒

+0

@Tichodroma好的非常感謝 – joksy82

回答

1

這是因爲spedizione0_沒有與子查詢的範圍中。試試這個,

SELECT spedizione0_.idspedizione,      // add additionl columns 
     COUNT(n.idnegozio) AS formula5_     
FROM spedizione spedizione0_ 
     LEFT JOIN confezione c 
      ON c.idspedizion = spedizione0_.idspedizione 
     LEFT JOIN negozio n 
      ON n.idnegozio = c.idnegozio 
WHERE (
      n.datainizio <= spedizione0_.dataspedizione AND 
      n.datafine >= spedizione0_.dataspedizione 
     ) 
      OR c.idspedizione != 0 
GROUP By spedizione0_.idspedizione 
ORDER BY spedizione0_.dataspedizione DESC 

希望這有助於

enter image description here

+0

是的。非常感謝它的工作。我會送你一瓶酒。但我仍然沒有解決範圍問題。爲什麼在where子句中可見並且在ON Cluase中沒有。所以無論如何謝謝;) – joksy82

0

我所看到的,你在這裏使用了錯誤的語法。當你使用左外連接時,你不能在ON子句中提到多個條件。 在你的情況下,你需要在該子句之後使用一個更多的左連接子句來加入出錯的第三個表。

+0

這不是真的,如果我使用「ON n.idnegozio = c.idnegozio和c.idspedizione = 1」查詢運行。所以我可以在一個ON子句中做多個條件.... – joksy82

+1

Ya沒錯,但在你的情況下,因爲你加入第三個表格,所以不能完成.. –