我正在尝试使用派生表将表中的一条记录连接到另一条记录,并且在确定正确的查询时遇到了一些麻烦。我想要做的是将派生表的JOIN连接到查询,其中派生表使用where语句,这取决于要连接的外部查询的数据。所以这是我正在处理的当前代码:
SELECT a.viewerid, a.id, v.id AS entry, a.jobid, v.sourceid, v.cost, a.applicant
FROM a_views a,
JOIN (
SELECT TOP 1 id, sourceid, cost FROM a_views vt
WHERE vt.viewerid = a.viewerid
AND vt.viewed_at <= a.viewed_at
AND vt.referrer NOT LIKE '%' + vt.hostName + '%'
ORDER BY viewed_at DESC
) v
派生表是外部查询使用的同一个表的查询,而viewerid
是表中的FK,其中id
是唯一的自动递增PK。我需要在a_views表中获取最新记录,其中查看者id匹配,datestamp(seen_at)小于外部日期戳,而referrer列不包含hostName列。
答案 0 :(得分:2)
听起来你需要APPLY:
SELECT a.viewerid, a.id, v.id AS entry, a.jobid, v.sourceid, v.cost, a.applicant
FROM a_views a
CROSS APPLY (
SELECT TOP 1 id, sourceid, cost FROM a_views vt
WHERE vt.viewerid = a.viewerid
AND vt.viewed_at <= a.viewed_at
AND vt.referrer NOT LIKE '%' + vt.hostName + '%'
ORDER BY viewed_at DESC
) v
由于您的查询已JOIN
我已经去了CROSS APPLY
,但您可能需要OUTER APPLY
,具体取决于您的具体要求。