Mysql 有没有办法避免一个查询有三个子查询的子查询

Mysql 有没有办法避免一个查询有三个子查询的子查询,mysql,Mysql,我有这个查询,它在性能方面非常有效(不确定) SELECT ssp.product_id, p.price FROM system_step_product AS ssp JOIN product AS p ON p.product_id=ssp.product_id WHERE ssp.system_id = 14 AND ssp.step_number = ( SELECT step_number FROM system_step_product WHERE system_id

我有这个查询,它在性能方面非常有效(不确定)

SELECT ssp.product_id, p.price
FROM system_step_product AS ssp
JOIN product AS p ON p.product_id=ssp.product_id 
WHERE ssp.system_id = 14
AND ssp.step_number = (
  SELECT step_number
  FROM system_step_product
  WHERE system_id = '14'
  AND step_number > (
    SELECT step_number
    FROM system_step_product
    WHERE system_id = '14'
    AND product_id = '81'
    ORDER BY step_number ASC
    LIMIT 1
  )  
  ORDER BY step_number ASC
  LIMIT 1
)

如果我必须使用这种方法,我会的,但我想知道是否有人能想出一种更好的方法来执行这个查询

这是未经测试的,但也许你可以从中构建

select 
        ssp.product_id, 
        p.price 
    from 
        system_step_product as ssp 
    join 
        product as p 
        on p.product_id = ssp.product_id        
    left join
        ( select min(step_number) as min_step_number
          from system_step_product
          where system_id = '14'
            and product_id = '81'
        ) minstep
        on minstep.min_step_number = ssp.step_number
    where
        minstep.min_step_number is null and
        ssp.system_id = 14 

这两个limit子句使得join语句需要
row\u number()OVER()
window函数,这在MySQL中是不可用的。即使这样,也可能会使您的查询效率低于当前的效率。

w/o看看逻辑,您可以摆脱订单/限制1的内容:

    SELECT ssp.product_id, p.price
    FROM system_step_product AS ssp
    JOIN product AS p ON p.product_id=ssp.product_id 
    WHERE ssp.system_id = 14
    AND ssp.step_number = (
        SELECT MIN(step_number)
        FROM system_step_product
        WHERE system_id = '14'
        AND step_number > (
            SELECT MIN(step_number)
            FROM system_step_product
            WHERE system_id = '14'
            AND product_id = '81'
        )
    )
也许有一种更好的方法来完成您正在做的事情并抛弃内部查询,但很难说不理解查询的目标


加上。。。定义“更好”:)是否可以使用join?这比内部查询更有效。