[英]SQL Server : select distinct records with inner join and where clause
[英]SQL Server - INNER JOIN WITH DISTINCT
我很難做到以下幾點:
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;
我認為您實際上為您的問題中的正確答案提供了一個良好的開端(您只需要正確的語法)。 我遇到了完全相同的問題,並且將 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
您可以使用 CTE 獲取第二個表的不同值,然后將其與第一個表連接。 您還需要根據 LastName 列獲取不同的值。 您可以使用按姓氏分區並按名字排序的 Row_Number() 執行此操作。
這是代碼
;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
在“選擇”之后添加“不同”。
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)
試試那個。
選擇不同的 a.FirstName, a.LastName, v.District from AddTbl a 內連接 ValTbl v on a.LastName = v.LastName order by a.FirstName;
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.