为什么这个带有subselect和Max()的MySQL查询不起作用?

时间:2015-07-23 18:18:35

标签: mysql

为什么这个MySQL查询不起作用?

使用Subselect我只想输入最后一个ID /价格。

select preco_id, centroide_produto_id, produto_id, preco_venda from precos A, cluster_copy3 CL
where A.preco_id = (select MAX(preco_id) from precos B where B.preco_id=A.preco_id ) 
and CL.centroide_produto_id = 9805
and A.produto_id=CL.similar_produto_id

2 个答案:

答案 0 :(得分:0)

您的子查询是“相关的”,WHERE的该部分将始终为真,因为MAX(X) WHERE X=X是X.因此,您获得与strong_copy3记录关联的每个 precos记录9805如果我正确地猜测你想要的结果,那么取消子查询中的WHERE应该修复它。

我认为这可能更符合您的需求:

SELECT preco_id, centroide_produto_id, produto_id, preco_venda 
FROM precos AS A 
INNER JOIN cluster_copy3 AS CL ON A.produto_id=CL.similar_produto_id
WHERE A.preco_id = (
   SELECT MAX(preco_id) 
   FROM precos AS A1 
   INNER JOIN cluster_copy3 AS CL1 ON A1.produto_id=CL1.similar_produto_id
   WHERE and CL1.centroide_produto_id = 9805
)

或者这也应该有效:

SELECT preco_id, centroide_produto_id, produto_id, preco_venda
FROM precos AS A1 
INNER JOIN cluster_copy3 AS CL1 ON A1.produto_id=CL1.similar_produto_id
WHERE and CL1.centroide_produto_id = 9805
ORDER BY preco_id DESC
LIMIT 1
;

根据实际数据,我不确定哪个更快。

答案 1 :(得分:0)

在子查询中的条件应该不需要。喜欢这个

select preco_id, centroide_produto_id, produto_id, preco_venda from precos A, cluster_copy3 CL
where A.preco_id = (select MAX(preco_id) from precos B  ) 
and CL.centroide_produto_id = 9805
and A.produto_id=CL.similar_produto_id