Ошибка MySQL при попытке получить уникальные значения, используя DISTINCT вместе с LEFT JOIN - PullRequest
2 голосов
/ 18 сентября 2009

У меня есть две MySQL таблицы, курсы и student_courses, мне нужно получить уникальные имена course_name из таблицы курсов Но я получаю ошибку при попытке выполнить мой запрос.

Вот мой запрос

        SELECT
            sc.c_id,
            DISTINCT c.course_name
        FROM
            Courses AS c
        LEFT JOIN Student_Courses AS sc ON c.c_id = sc.c_id
        WHERE
            sc.s_id = 4

Это ошибка, которую я получаю

CDbCommand failed to execute the SQL statement: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DISTINCT c.course_name

FROM Курсы AS c LEFT JOIN Student_Courses AS 'в строке 3

Ответы [ 2 ]

6 голосов
/ 18 сентября 2009

DISTINCT - это ключевое слово, которое следует использовать сразу после SELECT (посмотрите синтаксис Mysql SELECT ). Вы не можете выделить столбцы по-разному, вы просто делаете запрос SELECT DISTINCT. То, что вы, возможно, хотите, это GROUP BY. Но тогда вам нужна агрегатная функция (чтобы сообщить mysql, что делать с другими столбцами - теми, которые вы не GROUP ing BY.) как агрегатная функция (которая просто объединяет все столбцы в каждой группе, используя запятую):

SELECT c.course_name, GROUP_CONCAT(sc.c_id),
FROM Courses AS c
LEFT JOIN Student_Courses AS sc ON c.c_id = sc.c_id
WHERE sc.s_id = 4
GROUP BY course_name
2 голосов
/ 18 сентября 2009
SELECT
        DISTINCT sc.c_id,
        c.course_name
FROM
        Courses AS c
LEFT JOIN Student_Courses AS sc ON c.c_id = sc.c_id
WHERE
        sc.s_id = 4

ключевое слово DISTINCT должно быть первым словом после выбора, поскольку оно будет применяться ко всей строке.
Это как если бы вы сказали:

SELECT DISTINCT(sc.c_id, c.course_name, ...) FROM ...

Вы не можете сказать:

 SELECT sc.c_id, DISTINCT(c.course_name, ...) FROM ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...