Как выбрать отличный в SQL-сервере 2008, но только для одного поля из многих?

У меня есть запрос:

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?

10
задан bakerjr 27 April 2010 в 11:48
поделиться

3 ответа

Вы делаете это:

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

Теперь, вероятно, это тоже не даст того, что вы хотите, но одно можно сказать наверняка: вы не можете обмануть механизм базы данных, чтобы просто «выберите одну из строк для возврата, мне все равно, какую».

21
ответ дан 3 December 2019 в 15:51
поделиться

Вы имеете в виду что-то вроде следующего

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 
1
ответ дан 3 December 2019 в 15:51
поделиться
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
5
ответ дан 3 December 2019 в 15:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: