MySQL选择内部选择文本字段不为空的位置

时间:2016-10-25 02:24:15

标签: mysql

请问,如何使此查询有效?

我已经尝试过D.descricao<> '' / D.descricao IS NOT NULL / ORDER BY LENGTH(descricao)DESC LIMIT 1并且没有。

表produtos和cluster8的连接返回X行。在这些行中,有些列的descricao列中包含一些内容,而其他列则为空。通过子查询(第2行),我试图获得descricao不是空的记录,但直到现在才成功。

我使用子查询的原因是因为当所有行都有descricao = empty时,即使这样也会返回主SELECT中的其他字段。

这里是SQLfiddle:sqlfiddle.com/#!9/2806a/1

SELECT P.loja_id, 
       P.categoria_id, 
       C.centroide_produto_id, 
       (SELECT D.descricao 
        FROM   produtos D 
        WHERE  D.produto_id = C.centroide_produto_id 
               AND D.descricao <> '' 
        ORDER  BY Length(descricao) DESC) AS descricao 
FROM   produtos P, 
       cluster8 C 
WHERE  P.produto_id = C.centroide_produto_id 
       AND C.centroide_produto_id = 1926 
GROUP  BY centroide_produto_id 

2 个答案:

答案 0 :(得分:0)

如果您要前往group by,则需要在所有字段上使用汇总功能,例如summinmax ....选择group by列表中没有的内容。另外,我建议您使用inner join而不是第二个select。那么你只需要一个where子句。您可能需要having子句,具体取决于您的意图以及您选择的汇总函数。

修改

以下内容不会产生匹配的produto_idnomedescricao,但根据您的sqlfiddle,它看起来就像您想要的那样。此外,您似乎应该能够使用选择列表中ORDER BY上的max()替换整个D.descricao子句,但您可以调整这些内容。

SELECT P.produto_id, 
       P.nome, 
       D.descricao
FROM   produtos P, 
       cluster8 C,
       produtos D
WHERE  P.produto_id = C.centroide_produto_id 
       AND C.centroide_produto_id = 10 
       AND D.produto_id = C.similar_produto_id 
       AND D.descricao <> ''
GROUP  BY centroide_produto_id, P.nome -- <-- added P.nome here
ORDER  BY Length(D.descricao) DESC

答案 1 :(得分:0)

你可以加入他们

SELECT P.loja_id, 
       P.categoria_id, 
       C.centroide_produto_id
FROM   cluster8 C 
JOIN  produtos P
        on C.centroide_produto_id = P.produto_id
WHERE  P.produto_id = C.centroide_produto_id 
       AND C.centroide_produto_id = 1926 
       AND P.descricao <> ''
       AND P.descricao is not null 
GROUP  BY C.centroide_produto_id