2010-07-31 34 views
0

我需要在子查詢中執行子查詢是什麼導致「未知列't1.product_id'在'where子句'」中。在我的例子中,它在第7行。如何解決這個問題呢?由於子查詢中的子查詢「未知列」

SELECT *,product_id id, 
    (SELECT GROUP_CONCAT (value ORDER By `order` ASC SEPARATOR ', ') 
    FROM (
     SELECT `order`,value 
     FROM slud_data 
     LEFT JOIN slud_types ON slud_types.type_id=slud_data.type_id 
     WHERE slud_data.product_id = t1.product_id 
      AND value!='' AND display=0 
     LIMIT 3 
    ) tmp) text 
FROM slud_products t1 
WHERE 
    now() < DATE_ADD(date,INTERVAL +ttl DAY) AND activated=1 
    ORDER BY t1.date DESC 

這個問題從LIMIT ignored in query with GROUP_CONCAT

+0

在沒有ORDER BY子句的情況下,LIMIT依賴表索引的底層結構,這對於某些人來說是有點不可預知的。 – Strawberry 2013-04-05 16:58:10

回答

2

使用派生表/內嵌視圖繼續,並且表的別名:

SELECT product_id AS id, 
     GROUP_CONCAT (y.value ORDER BY y.`order`) 
    FROM slud_products t1 
    JOIN (SELECT sd.product_id, 
       sd.value, 
       sd.`order` 
      FROM SLUD_DATA sd 
     LEFT JOIN slud_types ON slud_types.type_id = slud_data.type_id 
      WHERE value! = '' 
      AND display = 0) y ON y.product_id = t1.product_id 
           AND y.order <= 3 
    WHERE now() < DATE_ADD(date,INTERVAL +ttl DAY) 
    AND activated = 1 
GROUP BY product_id 
ORDER BY t1.date DESC 
+0

你好,仍然想知道如何處理來自原始查詢的「LIMIT 3」子句?如果'order'不是sequental字段或不是基於零? – Dfr 2011-05-27 07:58:08

+0

@Dfr:'AND y.order <= 3'是一個分組限制。如果OP將此標記爲答案,那麼可以認爲'order'是數字... – 2011-05-27 14:50:06

4

我發現它更舒適的使用在查詢中的變量有2個以上選擇深度。

SELECT *,@product := product_id id, 
    (SELECT GROUP_CONCAT (value ORDER By `order` ASC SEPARATOR ', ') 
    FROM (
     SELECT `order`,value 
     FROM slud_data 
     LEFT JOIN slud_types ON slud_types.type_id=slud_data.type_id 
     WHERE slud_data.product_id = @product 
      AND value!='' AND display=0 
     LIMIT 3 
    ) tmp) text 
FROM slud_products t1 
WHERE 
    now() < DATE_ADD(date,INTERVAL +ttl DAY) AND activated=1 
    ORDER BY t1.date DESC 
+0

這不適用於所有版本的MySQL。 – 2014-06-02 20:31:46