рассчитывать на каждую строку - PullRequest
0 голосов
/ 31 октября 2010

Что не так с этим запросом?

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» в «где предложение»

Спасибо

Ответы [ 3 ]

6 голосов
/ 31 октября 2010

Это работает?

SELECT *, (SELECT COUNT(*)
    FROM words
    WHERE words.project=projects.id) as pCount
 FROM projects
2 голосов
/ 31 октября 2010

Похоже, вы пытаетесь подсчитать для каждого проекта количество слов, встречающихся более одного раза.

Вы можете запустить свой подзапрос для всех проектов, а затем использовать 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');
2 голосов
/ 31 октября 2010

Ваш внутренний подзапрос ничего не знает о внешнем запросе, поэтому таблица projects недоступна.

...