2017-07-04 184 views
-3

我有两个表A和B.在不使用子查询的情况下编写查询

它们通过一个名为id的公共字段连接。表B还有一个字段post_code和一个附加到该post_code的日期,这意味着post_code首次输入到数据库中。

我需要选择最新的邮政编码并将其连接到表A上的一行,而不需要子查询。

我有一个子查询解决方案,但它采取了太久

TIA

+2

份额查询在这里,它给更多clearity –

+0

我能想到的唯一提供解决方案的DBMS是带有'DISTINCT ON'的PostgreSQL。所有其他DBMS需要一个子查询,可以通过过滤'ROW_NUMBER'结果或使用'MAX(date)'子查询或应用'CROSS APPLY'或'LATERAL'子查询。你使用的是什么DBMS,是什么让你认为你不能使用子查询? –

+0

我正在使用SQL Server。我在表A中有超过100万行。在子查询解决方案中,这意味着每行的子查询。正如我在我的问题中所说的那样,时间太长了。 对于服务器较大的人来说,这可能不是问题,但我必须和我坐在我对面的同事一起玩:) – user2573436

回答

0

您可以尝试使用APPLY

Create Table #A(Id int) 

Create Table #B(Id int, AId int, PostCode VARCHAR(10), DateAdded DATE) 

Insert into #A 
    Values(1),(2) 


Insert into #B 
    Values(1,1,'NW1', GETDATE()-100), 
      (2,1,'S20', GETDATE()-200) 

Select * 
From #A A 
    CROSS APPLY(SELECT TOP 1 B.* 
       FROM #B B 
       WHERE A.Id = B.AId 
       ORDER BY DateAdded DESC) Latest  
+0

不错,谢谢。我以前没有遇到过交叉申请。 – user2573436

+0

@ user2573436:这是你之后的事情吗?你的问题并不清楚 –

+0

我对SQL概念有点朦胧,所以我的问题可能不是最清楚的。我应用了您的解决方案,并提出了我正在寻找的确切答案,欢呼。 – user2573436

相关问题