"未知列",因为子查询子查询

Mār*_*ovs 1 mysql sql subquery mysql-error-1054

我需要在子查询中执行子查询,导致'where子句'中的"未知列't1.product_id'".在我的例子中,它在第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
Run Code Online (Sandbox Code Playgroud)

在使用GROUP_CONCAT查询时忽略了LIMIT的问题

Ada*_*m F 5

我发现在超过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
Run Code Online (Sandbox Code Playgroud)

  • **不要这样做!!!** 它不会可靠地工作:您不能保证 SELECT 表达式的从左到右的评估顺序,因此您的子查询可能会在“@product”更新之前*被评估,对于给定的行。手册中:“涉及用户变量的表达式的求值顺序是未定义的。例如,不能保证 SELECT @a, @a:=@a+1 首先求值@a,然后执行赋值。”。(https://dev.mysql.com/doc/refman/8.0/en/user-variables.html)。 (2认同)