У меня есть запрос:
SELECT Content.content_name, Language2.Name, Language2.language_id,
Content.id, Content.content_description,
FROM Language AS Language2
LEFT JOIN contents AS Content ON (Language2.language_id = Content.language_id)
Как я выбираю только отличный content_name?
Вы делаете это:
SELECT DISTINCT Content.content_name
FROM Language AS Language2
LEFT JOIN contents AS Content ON (Language2.language_id = Content.language_id)
Так почему это не отвечает на ваш вопрос?
Рассмотрим следующие данные (только первые два столбца):
content_name Name
XXXXX 1234
XXXXX 5678
SELECT DISTINCT
подразумевает, что вам нужна только одна строка, но что вы хотите для имени?
Что вам нужно сделать, это переписать код, чтобы использовать GROUP BY
и выберите подходящую агрегатную функцию для других столбцов:
SELECT
Content.content_name,
MIN(Language2.Name) AS Name,
MIN(Language2.language_id) AS language_id,
MIN(Content.id) AS id,
MIN(Content.content_description) AS content_description,
FROM
Language AS Language2
LEFT JOIN contents AS Content
ON (Language2.language_id = Content.language_id)
GROUP BY
Content.content_name
Теперь, вероятно, это тоже не даст того, что вы хотите, но одно можно сказать наверняка: вы не можете обмануть механизм базы данных, чтобы просто «выберите одну из строк для возврата, мне все равно, какую».
Вы имеете в виду что-то вроде следующего
SELECT Content.content_name,
FROM Language AS Language2
LEFT JOIN contents AS Content ON (Language2.language_id = Content.language_id)
Group by Content.content_name
WITH q AS
(
SELECT Content.content_name, Language2.Name, Language2.language_id, Content.id, Content.content_description, ROW_NUMBER() OVER (PARTITION BY content_name ORDER BY language_id) AS rn
FROM Language Language2
LEFT JOIN
Contents AS Content
ON Language2.language_id = Content.language_id
)
SELECT *
FROM q
WHERE rn = 1