基于来自外部查询的特定数据加入派生表

时间:2012-12-04 17:53:17

标签: sql sql-server sql-server-2008

我正在尝试使用派生表将表中的一条记录连接到另一条记录,并且在确定正确的查询时遇到了一些麻烦。我想要做的是将派生表的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列。

1 个答案:

答案 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,具体取决于您的具体要求。