2011-09-15 18 views
1
SELECT num, COUNT(num) AS amt 
FROM table 
WHERE num IN (
    SELECT num 
    FROM table 
    WHERE id IN (1,2,3)) 
GROUP BY num 
HAVING amt > 1 

另外,我怎樣才能得到如何摺疊這個嵌套的MySQL查詢?

'777'=> '2'

..代替

'NUM'=> '777'
'amt'=>'2'

結果?

感謝

+1

我懷疑你的問題的第二部分是與PHP相關的,而不僅僅是SQL。 –

+0

我知道如何在PHP中,但我認爲它可以用MySQL來完成。感謝編輯,這裏是奇怪的,可怕的文本編輯器 – Shara

回答

3

您不能在聚合列做了where,你必須使用having那些。

SELECT t1.num, 
     COUNT(t1.num) AS amt 
FROM `table` t1 
INNER JOIN `table` t2 ON (t1.num = t2.num) 
WHERE t2.id IN (1,2,3) 
GROUP BY t1.num 
HAVING amt > 1 
+0

這使我在第一次溢出:)謝謝,它工作良好。那裏有什麼陷阱(高負荷等)? – Shara

+0

@Shara,有條款並不貴。只有在計數結果已知的情況下才會在查詢的後期對其進行評估。 – Johan

+0

我是關於INNER JOIN,而不是關於。我做了一些測試,這個查詢比兩個簡單的查詢更快 – Shara