簡體   English   中英

為什么這個帶有subselect和Max()的MySQL查詢無法工作?

[英]Why this MySQL query with subselect and Max() wont work?

為什么此MySQL查詢無法正常工作?

使用子選擇,我只想獲取最后插入的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

您的子查詢是“相關的”,因為MAX(X) WHERE X=X是X,所以WHERE的那部分將始終為true。因此,您將獲得與9805的cluster_copy3記錄相關聯的每個 precos記錄。如果我正確猜到了您想要的結果,則子查詢應該修復它。

我認為這可能更符合您的需求:

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
;

根據實際數據,我不確定哪個會更快。

子查詢中的條件不應該是必需的。 像這樣

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM