| ORDER BY K1.Rev DESC
により
┌──┬──┐ ┌──┬──┐
│Num │Rev │ │Num │Rev │
├──┼──┤ ├──┼──┤
│ 1│ 1│ │ 5│ 20│ ON DK1.Name = T1.Nameに非該当
│ 2│ 5│→│ 4│ 10│ ON DK1.Name = T1.Nameに非該当
│ 3│ 1│ │ 2│ 5│ ON DK1.Name = T1.Nameに該当
│ 4│ 10│ │ 1│ 1│ ON DK1.Name = T1.Nameに該当
│ 5│ 20│ │ 3│ 1│ ON DK1.Name = T1.Nameに非該当
└──┴──┘ └──┴──┘
WHERE K1.Rev <= @REVにより
@REV=9 の場合
┌──┬──┐
│Num │Rev │ @Rev=9に該当
├──┼──┤ ↓
│ 5│ 20│××
│ 4│ 10│××
│ 2│ 5│○○ → TOP(1) で取得
│ 1│ 1│○○
│ 3│ 1│×○
└──┴──┘
↑
ON DK1.Name = T1.Nameに該当
@REV=10 の場合
┌──┬──┐
│Num │Rev │ @Rev=10に該当
├──┼──┤ ↓
│ 5│ 20│××
│ 4│ 10│×○ → TOP(1) で取得 → ON DK1.Name = T1.Name
│ 2│ 5│○○ に該当しないのでnullになる
│ 1│ 1│○○
│ 3│ 1│×○
└──┴──┘
↑
ON DK1.Name = T1.Nameに該当
と、いうことですよね?
ON DK1.Name = T1.Name で
既にはじかれるのかと思ってたのですが
仕方がないので
LEFT OUTER JOIN (
SELECT TOP(1) D1.Num, D1.Name, D1.Ver, D1.URL, K1.Rev
FROM [MyMaster].[dbo].D1
LEFT OUTER JOIN [MyMaster].[dbo].K1 ON K1.Num = D1.Num
WHERE K1.Rev <= @REV
D1.Name = T1.Name ←これを追加
ORDER BY K1.Rev DESC
) AS DK1 ON DK1.Name = T1.Name
と、単純に追加してみたのですが・・・
T1.Nameがバインドできないそうです。
ではどうすればよいのでしょうか?
|