2017-07-19 55 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中使用別名,或者可以在執行時運行計數。同樣的事情,順序。但是一羣人在同一個陳述中永遠不能使用選擇別名。