2017-07-19 28 views
1

假设下面的查询:防止出现在结果计算列设置

SELECT meta_value as xyz, COUNT(*) AS count 
    FROM wp_postmeta 
    WHERE meta_key = "xyz" AND meta_value != "" 
    GROUP BY meta_value 
    HAVING count > 1 

查询工作正常,但我不需要在我的结果count列。如何排除count列?

我知道我可以使用子查询(如下所示),但我想知道是否有更好的方法。

SELECT xyz FROM (
    SELECT meta_value as xyz, COUNT(*) AS count 
    FROM wp_postmeta 
    WHERE meta_key = "xyz" AND meta_value != "" 
    GROUP BY meta_value 
    HAVING count > 1 
) AS t 
+3

'HAVING count> 1'正在使用select中的别名计数...因此,您可以使用count(*)而不是HAVING子句中的别名,并从select中消除count(*)和别名。因此它变得像'SELECT meta_value as xyz ... HAVING count(*)> 1' – xQbert

+0

这个问题的第一个答案应该可以解决你的问题:[stackoverflow.com/questions/7151401/...](https:/ /stackoverflow.com/questions/7151401/sql-query-for-finding-records-where-count-1)。将'COUNT(*)'移到你的'HAVING'子句... – War10ck

+0

@xQbert将它添加为答案 – Shadow

回答

3

HAVING count > 1使用从选择别名个性化......所以,你可以替换count(*),而不是HAVING子句中的别名(计数),消除COUNT(*),并从选择的别名。因此它变得类似于

SELECT meta_value as xyz 
... 
HAVING count(*) > 1 

操作顺序在这里很重要。在select之后工作,因此它可以在select中使用别名,或者可以在执行时运行计数。同样的事情,顺序。但是一群人在同一个陈述中永远不能使用选择别名。