SQL Server - ВНУТРЕННЕЕ СОЕДИНЕНИЕ С DISTINCT - PullRequest
15 голосов
/ 20 декабря 2011

Мне трудно сделать следующее:

select a.FirstName, a.LastName, v.District
from AddTbl a order by Firstname
inner join (select distinct LastName from
            ValTbl v  where a.LastName = v.LastName)  

Я хочу сделать соединение на ValTbl, но только для разных значений.

Ответы [ 6 ]

12 голосов
/ 20 декабря 2011

Попробуйте это:

select distinct a.FirstName, a.LastName, v.District
from AddTbl a 
  inner join ValTbl v
  on a.LastName = v.LastName
order by a.FirstName;

Или вот это (делает то же самое, но синтаксис другой):

select distinct a.FirstName, a.LastName, v.District
from AddTbl a, ValTbl v
where a.LastName = v.LastName
order by a.FirstName;
5 голосов
/ 08 сентября 2017

Nate , я думаю, что вы действительно дали хороший старт для правильного ответа прямо в своем вопросе (вам просто нужен правильный синтаксис).У меня была точно такая же проблема, и размещение DISTINCT в подзапросе было действительно менее затратным, чем предложенные здесь другие ответы.

select a.FirstName, a.LastName, v.District
from AddTbl a 
inner join (select distinct LastName, District 
    from ValTbl) v
   on a.LastName = v.LastName
order by Firstname   
2 голосов
/ 20 декабря 2011

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

select a.FirstName, a.LastName, v.District
from AddTbl a order by Firstname
natural join (select distinct LastName from
            ValTbl v  where a.LastName = v.LastName)

попробуйте это.

1 голос
/ 27 марта 2018

выберите отличные a.FirstName, a.LastName, v.District от AddTbl внутреннее объединение ValTbl v для a.LastName = v.LastName по a.FirstName;

надеюсь, что это поможет

1 голос
/ 19 марта 2015

Вы можете использовать CTE, чтобы получить отличительные значения второй таблицы, а затем соединить это с первой таблицей. Вам также необходимо получить различные значения на основе столбца LastName. Это делается с помощью Row_Number (), разделенного на LastName и отсортированного по FirstName.

Вот код

;WITH SecondTableWithDistinctLastName AS
(
        SELECT  *
        FROM    (
                    SELECT  *,
                            ROW_NUMBER() OVER (PARTITION BY LastName ORDER BY FirstName) AS [Rank]
                    FROM    AddTbl
                )   
        AS      tableWithRank
        WHERE   tableWithRank.[Rank] = 1
) 
SELECT          a.FirstName, a.LastName, S.District
FROM            SecondTableWithDistinctLastName AS S
INNER JOIN      AddTbl AS a
    ON          a.LastName = S.LastName
ORDER   BY      a.FirstName
1 голос
/ 20 декабря 2011

добавить «отчетливый» после «выбора».

select distinct a.FirstName, a.LastName, v.District , v.LastName
from AddTbl a 
inner join ValTbl v  where a.LastName = v.LastName  order by Firstname
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...