下面的查詢在MySQL 56年5月1日失效:爲什麼此查詢在MySQL 5.1.56中失敗?
SELECT
shop_id, products.product_id AS
product_id, brand, title, price, image, image_width, image_height
FROM products, users LEFT JOIN
(
SELECT fav5.product_id AS product_id, SUM(CASE
WHEN fav5.current = 1 AND fav5.closeted = 1 THEN 1
WHEN fav5.current = 1 AND fav5.closeted = 0 THEN -1
ELSE 0
END) AS favorites_count
FROM favorites fav5
GROUP BY fav5.product_id
) AS fav6 ON products.product_id=fav6.product_id
WHERE products.product_id= 46876 AND users.user_id!=products.product_id
的錯誤是
#1054 - Unknown column 'products.product_id' in 'on clause'
未經用戶表此修改不會失敗:
SELECT
shop_id, products.product_id AS
product_id, brand, title, price, image, image_width, image_height
FROM products LEFT JOIN
(
SELECT fav5.product_id AS product_id, SUM(CASE
WHEN fav5.current = 1 AND fav5.closeted = 1 THEN 1
WHEN fav5.current = 1 AND fav5.closeted = 0 THEN -1
ELSE 0
END) AS favorites_count
FROM favorites fav5
GROUP BY fav5.product_id
) AS fav6 ON products.product_id=fav6.product_id
WHERE products.product_id= 46876
無論查詢中失敗MySQL 5.0.67。 (我從5.0.67導出數據庫並導入到5.1.56中,因此結構應該是相同的。)
產品表的確有product_id列,類型爲int(10)。收藏夾表中還有一個int類型的product_id列(10)。到底是怎麼回事?
謝謝這個解釋很有幫助。看起來如果我不混合加入符號,我可以在將來避免我原來的問題。 – jela
一般來說,是的。您應該在FROM子句中使用以逗號分隔的表表達式列表來了解符號的存在,以便您在看到它時能夠理解它。除非您被迫使用過時的編碼標準,否則不應編寫這種連接方式。默認情況下使用顯式JOIN/ON表示法。 –