避免从加入的 table 中选取行并仅将其用于获取列值
Avoid picking rows from joined table and use it only to get column value
dbo.MatchDate(@Date)
:returns 来自 dbo.Patients
table 的内联 TVF。内联 TVF returns 这些列:RowId
和Percentmatch
.
到目前为止我有这个查询:
INSERT INTO #Temp2 (RowNumber,ValFromFunc,FuncWeight,percentage)
SELECT RowNumber, d.PercentMatch, @constVal, d.PercentMatch * @constVal
from dbo.MatchDate(@Date) d inner join dbo.Patients p
on d.RowNumber = p.RowId
inner join dbo.ResultsStored rs on rs.RowId = d.RowNumber
where p.ModifiedAt > rs.ModifiedAt
我需要检查 dbo.MatchDate(@Date)
函数从 dbo.Patients
table 返回的行的 ModifiedAt
值是否大于 ModifiedAt
中行的 ModifiedAt
20=] table 和 RowId's
与 dbo.MatchDate(@Date)
返回的相同。由于 dbo.MatchDate(@Date)
returns 只有 RowId
和 PercentMatch
,为了获得这些行中的 ModifiedAt
,我在 [=] 上加入了 Patients
table 14=] 列。
然后为了比较起见,为了从 ResultsStored
table 得到 ModifiedAt
,我在 RowId
列上进一步加入了 dbo.ResultsStored
。
问题: 它导致插入重复的行,即我不仅从 dbo.MatchDate(@Date)
获取行,而且从 dbo.ResultsStored
table 获取行根本不是故意的。 dbo.ResultsStored
只是为了检查相同 row id's
.
的 ModifiedAt
值
由于 dbo.ResultsStored
table,我如何修改上述查询以避免 #Temp2
中的行重复?
我想你可以使用 EXISTS
来检查你想要的:
INSERT INTO #Temp2 (RowNumber,ValFromFunc,FuncWeight,percentage)
SELECT RowNumber, d.PercentMatch, @constVal, d.PercentMatch * @constVal
FROM dbo.MatchDate(@Date) AS d
WHERE EXISTS (
SELECT 1
FROM dbo.Patients AS p
INNER JOIN dbo.ResultsStored AS rs ON rs.RowId = d.RowNumber
WHERE (d.RowNumber = p.RowId) AND (p.ModifiedAt > rs.ModifiedAt) )
这将仅插入 #Temp2
来自 TVF
的记录,前提是有 至少一个 记录,具有相同的 RowId
,来自 dbo.Patients
且 ModifiedAt
大于来自 dbo.ResultsStored
.
的相应记录的 ModifiedAt
dbo.MatchDate(@Date)
:returns 来自 dbo.Patients
table 的内联 TVF。内联 TVF returns 这些列:RowId
和Percentmatch
.
到目前为止我有这个查询:
INSERT INTO #Temp2 (RowNumber,ValFromFunc,FuncWeight,percentage)
SELECT RowNumber, d.PercentMatch, @constVal, d.PercentMatch * @constVal
from dbo.MatchDate(@Date) d inner join dbo.Patients p
on d.RowNumber = p.RowId
inner join dbo.ResultsStored rs on rs.RowId = d.RowNumber
where p.ModifiedAt > rs.ModifiedAt
我需要检查 dbo.MatchDate(@Date)
函数从 dbo.Patients
table 返回的行的 ModifiedAt
值是否大于 ModifiedAt
中行的 ModifiedAt
20=] table 和 RowId's
与 dbo.MatchDate(@Date)
返回的相同。由于 dbo.MatchDate(@Date)
returns 只有 RowId
和 PercentMatch
,为了获得这些行中的 ModifiedAt
,我在 [=] 上加入了 Patients
table 14=] 列。
然后为了比较起见,为了从 ResultsStored
table 得到 ModifiedAt
,我在 RowId
列上进一步加入了 dbo.ResultsStored
。
问题: 它导致插入重复的行,即我不仅从 dbo.MatchDate(@Date)
获取行,而且从 dbo.ResultsStored
table 获取行根本不是故意的。 dbo.ResultsStored
只是为了检查相同 row id's
.
ModifiedAt
值
由于 dbo.ResultsStored
table,我如何修改上述查询以避免 #Temp2
中的行重复?
我想你可以使用 EXISTS
来检查你想要的:
INSERT INTO #Temp2 (RowNumber,ValFromFunc,FuncWeight,percentage)
SELECT RowNumber, d.PercentMatch, @constVal, d.PercentMatch * @constVal
FROM dbo.MatchDate(@Date) AS d
WHERE EXISTS (
SELECT 1
FROM dbo.Patients AS p
INNER JOIN dbo.ResultsStored AS rs ON rs.RowId = d.RowNumber
WHERE (d.RowNumber = p.RowId) AND (p.ModifiedAt > rs.ModifiedAt) )
这将仅插入 #Temp2
来自 TVF
的记录,前提是有 至少一个 记录,具有相同的 RowId
,来自 dbo.Patients
且 ModifiedAt
大于来自 dbo.ResultsStored
.
ModifiedAt