我有一個很難做到以下幾點:SQL服務器 - INNER JOIN具有鮮明
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但僅用於不同值的加入。
我有一個很難做到以下幾點:SQL服務器 - INNER JOIN具有鮮明
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但僅用於不同值的加入。
試試這個:
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;
「select」後添加「distinct」。
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
這是不一樣的做一個SELECT DISTINCT開頭因爲你正在浪費結果中所有計算的行。
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)
試試。
您可以使用CTE來獲取第二個表的不同值,然後將其與第一個表加入。 您還需要根據姓氏列獲取不同的值。您可以使用由姓氏分區的Row_Number()來執行此操作,並按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
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
'NATURAL JOIN'在MSSQL 2008 R1中是'不正確的語法' – itsho 2014-12-09 07:10:18