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?这比内部查询更有效。