2015-08-14 4 views
2

. Вы можете просмотреть этот запрос? Я не могу получить правильные значения в подзапросе. Я считаю, что моя логика неверна.Подзапрос MySQL не работает

Я пытаюсь сделать эту работу изо дня в день, но безуспешно.

Над запросом SQL в SQLfiddle есть комментарии, чтобы воспроизвести ошибку.

С этим sketch вы можете лучше понять, что мне нужно.

SELECT P.nome, centroide_produto_id, similar_produto_id, 
     (SELECT preco_venda FROM precos A 
     WHERE A.produto_id = CL.similar_produto_id 
      AND A.preco_id = (SELECT Max(preco_id) 
          FROM precos A2, 
           cluster_copy3 CL2 
          WHERE A2.produto_id = A.produto_id 
           AND A2.produto_id=CL2.similar_produto_id 
           AND A2.preco_venda = (SELECT Max(preco_venda) 
                FROM precos A3, 
                 cluster_copy3 CL3 
                WHERE A3.produto_id = CL3.similar_produto_id 
                 AND CL3.centroide_produto_id = CL.centroide_produto_id))) AS preco_maximo 
FROM produtos P, 
    cluster_copy3 CL 
WHERE P.produto_id = CL.centroide_produto_id 
AND CL.centroide_produto_id IN (9817, 9816) 
#GROUP BY CL.centroide_produto_id 
+0

и продукт, всегда похожий на себя? – Strawberry

+0

Возможно, если вы объясните, что вы хотите сделать, есть более простой запрос, который бы его выполнил. Простые данные образца и желаемые результаты (в вопросе) помогут. –

+0

и кажется, что некоторые путаницы о том, хотите ли вы самую высокую цену или самую последнюю цену – Strawberry

ответ

0

Возможно, вы могли бы попробовать что-то вроде этого, получая данные в подзапросе и группируя в основном запросе.

SELECT 
    t.nome, 
    t.centroide_produto_id, 
    t.similar_produto_id, 
    MAX(t.preco_maximo) 
FROM 
    (
     SELECT 
      P.nome, 
      centroide_produto_id, 
      similar_produto_id, 
      (
       SELECT 
        preco_venda 
       FROM 
        precos A 
       INNER JOIN cluster_copy3 CL2 ON A.produto_id = CL2.similar_produto_id 
       WHERE 
        A.produto_id = P.produto_id 
       ORDER BY 
        A.preco_id DESC, 
        A.preco_venda DESC 
       LIMIT 1 
      ) AS preco_maximo 
     FROM 
      produtos P, 
      cluster_copy3 CL 
     WHERE 
      P.produto_id = CL.similar_produto_id 
     AND CL.centroide_produto_id IN (9817, 9816) 
    ) AS t 
GROUP BY 
    t.centroide_produto_id 
Смежные вопросы