1

このクエリの何が問題になっていますか?

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

MySQLは'where句'に1054不明な列'projects.id'を返します

ありがとう

4

3 に答える 3

8

これは機能しますか?

SELECT *, (SELECT COUNT(*)
    FROM words
    WHERE words.project=projects.id) as pCount
 FROM projects
于 2010-10-31T13:31:55.513 に答える
2

内部サブクエリは外部クエリについて何も知らないため、projectsテーブルは使用できません。

于 2010-10-31T13:26:30.050 に答える
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');
于 2010-10-31T13:33:47.570 に答える