このクエリの何が問題になっていますか?
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'を返します
ありがとう
このクエリの何が問題になっていますか?
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'を返します
ありがとう
これは機能しますか?
SELECT *, (SELECT COUNT(*)
FROM words
WHERE words.project=projects.id) as pCount
FROM projects
内部サブクエリは外部クエリについて何も知らないため、projects
テーブルは使用できません。
プロジェクトごとに、複数回出現する単語の数を数えようとしているようです。
すべてのプロジェクトに対してサブクエリを実行してから、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');