请问,如何使此查询有效?
我已经尝试过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
答案 0 :(得分:0)
如果您要前往group by
,则需要在所有字段上使用汇总功能,例如sum
,min
,max
....选择group by
列表中没有的内容。另外,我建议您使用inner join
而不是第二个select
。那么你只需要一个where
子句。您可能需要having
子句,具体取决于您的意图以及您选择的汇总函数。
修改强>
以下内容不会产生匹配的produto_id
,nome
和descricao
,但根据您的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