0

我正在尝试使用派生表将表中的一条记录连接到另一条记录,并且在找出正确的查询来执行此操作时遇到了一些麻烦。我想要做的是将派生表加入查询,其中派生表使用 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 匹配的最新记录,日期戳 (viewed_at) 小于外部日期戳,并且引用者列不包含 hostName 列。

4

1 回答 1

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根据您的具体要求。

于 2012-12-04T18:01:23.677 回答