SQL内部联接不检索记录

时间:2016-09-13 17:01:48

标签: sql inner-join

我正在尝试加入2个表格。

表1(resource_log)是一个数据源,包含各种列,日期,时间,联系号码等。每次发生事务并在表中插入新行。

表2(目录)是一个提供姓名,团队,联系电话等的目录。

表2中的内容经常更新,保留以前的记录,最近的记录具有最近的记录日期(rdate)。

我想要做的是 - 显示2次之间的记录并加入表2中的最新目录信息。

我已经写了这个,它会拉回两个表但没有结果。

我将使用一个具体的,但假设的例子。

SELECT      top 20 * 
FROM        resource_log r
INNER JOIN          directory
ON          substring(rl.issi,4,4) = 
                    (
                     SELECT     distinct top 1 d.rdate                           
                     FROM       directory d             
                     WHERE      substring(d.id,2,4) = substring(r.id,4,4)           
                     ORDER BY   d.rdate desc
                      )
WHERE       r.date_and_time between '2016-09-13 11:00:00' and '2016-09-13 11:10:00' and r.id = '123456'

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为您需要cross applyouter apply

SELECT top 20 * 
FROM resource_log r OUTER APPLY
     (SELECT TOP 1 d.rdate                           
      FROM directory d             
      WHERE substring(d.id, 2, 4) = substring(r.id, 4, 4)           
      ORDER BY d.rdate desc
     ) d
WHERE r.date_and_time between '2016-09-13 11:00:00' and '2016-09-13 11:10:00' and
      r.id = '123456';

这将返回没有匹配目录的resource_log条记录。如果您不想要它们,请使用CROSS APPLY

此外,子查询中不需要distinct,因为您只选择一个值。