2010-10-31 66 views
0

此查詢有什麼問題?每行計數

SELECT *, (SELECT COUNT(*) 
FROM 
(
    SELECT NULL 
    FROM words 
    WHERE project=projects.id 
    GROUP BY word 
    HAVING COUNT(*) > 1 
) T1) FROM projects 

在MySQL返回1054未知列'projects.id 'where子句'

感謝

+1

什麼是表格結構?查詢應該返回什麼? – 2010-10-31 13:27:14

回答

6

這是行不通的嗎?

SELECT *, (SELECT COUNT(*) 
    FROM words 
    WHERE words.project=projects.id) as pCount 
FROM projects 
+0

我正要發佈結構細節,當我看到你的帖子,做了詭計!豎起大拇指! – fabjoa 2010-10-31 13:37:54

2

你內心的子查詢一無所知外部查詢,所以projects表不可用。

+0

我怎麼知道?如果我正在進行JOIN項目,則無論項目如何,它都會計算每個單詞 – fabjoa 2010-10-31 13:28:49

+0

@fabjoa:您能否向我們展示您的表結構以及預期輸出的示例? – 2010-10-31 13:36:48

+0

順便說一句,祝賀mySQL金徽章! – 2010-11-01 15:54:04

2

它看起來像你試圖爲每個項目計數出現不止一次的字數。

你可以運行你的子查詢的所有項目,然後使用JOIN來從項目表中的數據的其餘部分:

SELECT projects.*, COUNT(word) AS cnt 
FROM projects 
LEFT JOIN (
     SELECT project, word 
     FROM words 
     GROUP BY project, word 
     HAVING COUNT(*) > 1 
) T1 
ON T1.project = projects.id 
GROUP BY projects.id 

結果:

 
id cnt 
1 0 
2 1 
3 2 

測試數據:

CREATE TABLE projects (id INT NOT NULL); 
INSERT INTO projects (id) VALUES (1), (2), (3); 

CREATE TABLE words (project INT NOT NULL, word VARCHAR(100) NOT NULL); 
INSERT INTO words (project, word) VALUES 
(1, 'a'), 
(2, 'a'), 
(2, 'b'), 
(2, 'b'), 
(3, 'b'), 
(3, 'b'), 
(3, 'c'), 
(3, 'c');