有以下逻辑。 我不明白为什么查询会同时检索 '2',NY 和 3,'MA' 记录 不仅是'2','NY'记录。
create table dbo.DMDAddressCity
(
AddressCd char(3),
AddressCity varchar(20)
)
insert DMDAddressCity
select 'NY','New York'
insert DMDAddressCity
select 'MA','Boston'
create table dbo.DMDAddressPriority
(
PriorityId tinyint NOT NULL,
AddressCd char(3)
)
insert DMDAddressPriority
select 1,'NJ'
insert DMDAddressPriority
select 2,'NY'
insert DMDAddressPriority
select 3,'MA'
select PR.PriorityId, PR.AddressCd
from DMDAddressPriority PR
join DMDAddressCity CT
on
CT.AddressCd = PR.AddressCd
where PriorityId =
(
select min(PriorityId)
from DMDAddressPriority PR2
where
--trim(PR.AddressCd) = trim(PR2.AddressCd)
PR.AddressCd = PR2.AddressCd
)
我希望仅检索 1 条具有最小 priorityid 的记录。 感谢对我做错了什么的一些指导。
您的子查询引用外部查询并找到最小优先级,其中
PR.AddressCd = PR2.AddressCd
。当然,NY的addresscd
最小为2,MA的addresscd
最小为3,所以都选了
要获得整个表的最小值,您不需要子查询中的
PR.AddressCd = PR2.AddressCd
条件。然而……
where PriorityId =
(
select min(PriorityId)
from DMDAddressPriority PR2
)
...不会做你想做的,因为它会在表 (1) 中获得绝对最小值,你的记录都不匹配。您需要获得您正在考虑的记录的绝对最小值。我建议考虑更多的东西:
WITH cte AS
(
select PR.PriorityId, PR.AddressCd
from DMDAddressPriority PR
join DMDAddressCity CT
on CT.AddressCd = PR.AddressCd
)
SELECT *
FROM cte
WHERE priority = (SELECT min(priorityid) FROM cte)
或
SELECT PriorityId, AddressCd
FROM
(
select PR.PriorityId, PR.AddressCd, min(PR.PriorityId) OVER() MinPriorityId
from DMDAddressPriority PR
join DMDAddressCity CT
on CT.AddressCd = PR.AddressCd
)
WHERE PriorityId = MinPriorityId