2013-11-28 71 views
0

我有一個sql查詢返回了一些不正確的結果,因爲產品id被重複用於鏈接的產品,所以我在查詢結尾添加了以下內容,期望它僅採用任何產品ID的第一個實例:操作數應該包含1列錯誤

AND pc.products_id 
IN 
(SELECT 
pc.products_id, MIN(categories_id) 
FROM 
zen_products_to_categories pc 
GROUP BY 
pc.products_id) 

但我得到一個操作數應該包含1列(s)錯誤,當我運行的過程。我自己運行了這個查詢,它只給了我每個產品ID一次,所以不知道爲什麼我得到錯誤。

完整的查詢,我現在是:

SELECT p.products_quantity, p.abebooks_status, 
p.products_id AS id, 
p.products_status AS prodStatus, 
FORMAT(IFNULL(s.specials_new_products_price, p.products_price),2) AS price, 
pc.categories_id AS prodCatID, 
c.parent_id AS catParentID, 
cd.categories_name AS catName 
FROM 
zen_products p 
JOIN zen_products_description pd ON p.products_id=pd.products_id 
JOIN zen_products_to_categories pc ON p.products_id=pc.products_id 
JOIN zen_categories c ON pc.categories_id=c.categories_id 
JOIN zen_categories_description cd ON c.categories_id=cd.categories_id 
left join zen_specials s on (s.products_id = p.products_id AND ((s.expires_date > CURRENT_DATE) OR (s.expires_date = 0))) 
WHERE p.products_price > 0 and p.products_status = 1 
AND pc.products_id 
IN 
(SELECT pc.products_id, MIN(categories_id) 
FROM zen_products_to_categories pc GROUP BY pc.products_id) 
ORDER BY catName ASC 

誰能告訴我,爲什麼它不工作時,我增加額外的查詢,因爲它讓我百思不得其解

+0

你是認真的!這個問題在2013年11月被問到,你在2014年10月出現並將其標記爲重複。很高興我有更好的事情與我的時間。荒謬! –

回答

1

你可以嘗試使用:

AND (pc.products_id, pc.categories_id) 
    IN 
    (SELECT 
     pc.products_id, MIN(categories_id) 
    FROM 
     zen_products_to_categories pc 
    GROUP BY 
     pc.products_id) 

編輯:

在MySQL中,這樣的子查詢通常很慢。你應該有更好的運氣與JOIN:

SELECT .... 
FROM 
    .... 
    INNER JOIN (SELECT 
       products_id, MIN(categories_id) min_categories_id 
       FROM 
       zen_products_to_categories 
       GROUP BY 
       products_id) min_ct 
    ON pc.products_id=min_ct.products_id 
    AND pc.categories_id=min_ct.min_categories_id 
WHERE 
    .... 
+0

這是因爲查詢不會引發錯誤。但是,處理大約3秒前的事情需要花費30秒以上。有沒有辦法加快整個查詢。該數據庫有大約12,000個活動產品,但我不會期待它需要那麼長的時間 –

+0

@StevePrice請看我更新的答案 – fthiella

0

子查詢應返回一列,當你對匹配單個列從子查詢中刪除MIN(categories_id)

AND pc.products_id 
IN 
(SELECT 
pc.products_id 
FROM 
zen_products_to_categories pc 
GROUP BY 
pc.products_id) 
相關問題