UPDATE用更多数据更新问题后完成重写(如果真的对我之前的漫谈感兴趣,请参阅编辑历史记录)。
假设/理解:
A.Val
是唯一的(例如,只有一行 where A.Val = 423
)否则我们将需要更多信息来连接 from B
to A
(例如,如果 3x 行有A.Val = 423
我们返回 3 行/A.text
值,或者我们是否将匹配限制为单行通过附加标准?)
- 如果表中没有匹配项,
A
则返回A.text = NULL
(因此left join
)
我需要来自 OP 的更多输入的地方是B->A
加入。从 OP 的评论中,我们知道Label = 'Adria'
我们想从A
where拉行Val = max(Val) = 568
,但我不确定是否可以应用max()
toB.Val
或是否需要应用max()
to A.Val
:
- 将
B->A
加入限制为A.Val = max(B.Val)
或...
- 限制
B->A
加入A.Val = max(A.Val)
将加入限制为的一种想法B->A
A.Val = max(B.Val)
select CB.Label, A.text
from (select C.Label, max(B.Val) as maxVal
from C
join B
on C.Label = B.Label
and C.Label = 'Adria'
group by C.Label) as CB
left
join A
on A.Val = CB.maxVal
go
Label text
---------- ----------
Adria bars
如果我们delete A where Val = 568
(因此A.Val = max(B.Val) = 568
失败)查询返回:
Label text
---------- ----------
Adria NULL
将加入限制为的一种想法B->A
A.Val = max(A.Val)
select dt.Label, A.text
from (select C.Label, max(A.Val) as maxVal
from C
join B
on C.Label = B.Label
and C.Label = 'Adria'
left
join A
on A.Val = B.Val
group by C.Label) as dt
left
join A
on A.Val = dt.maxVal
go
Label text
---------- ----------
Adria bars
如果我们delete A where Val = 568
(这样A.Val = dt.maxVal = 423
)查询返回:
Label text
---------- ----------
Adria tuh
如果我们delete A
(因此A.Val = dt.maxVal
失败)查询返回:
Label text
---------- ----------
Adria NULL
注意:以上查询(除非代表我的任何剪切粘贴拼写错误)是在ASE 15.7 SP140
.