【发布时间】:2016-02-18 09:25:25
【问题描述】:
我正在与SQL Server 合作,我在加入一些表格时遇到了困难。
这里是场景:
我有以下表格:
- 系统
- 区域
- 转让
有关表格的更多信息:
- 每个区域可以有多个系统,但一个系统只能在一个区域中。
- 一个系统可以有多个传输,但一个传输元组只能与一个系统关联。
System 和Area 可以按照通常的方式加入,但是对于传输表,我想检索特定数据,然后加入System 和Area。
这是我的查询
SELECT
System.*,
Transferring.SomeAttribute
FROM
System INNER JOIN
Area ON Area.ID = System.AreaID INNER JOIN
(
SELECT TOP 1
SomeAttribute,
SystemID
FROM
Transfer
WHERE
Transfer.SystemID = {System ID ?}
ORDER BY
Transfer.Date DESC
) Transferring ON Transferring.SystemID = System.ID
WHERE
Area.ID = @AreaID
上面的问题是我想在Transferring 视图中按SystemID 过滤并只返回TOP 1。
如果我从view 中删除WHERE 子句并仅保留连接时的SystemID = System.ID 将返回错误数据,因为TOP 1 将首先发生,然后是SystemID = System.ID。
另一方面,我想在一个 SELECT 语句中实现它,并且我不想使用两个不同的查询。
只是为了从上面的查询中弄清楚我想要什么:
我想获取一个区域中所有系统的信息,以及每个系统的SomeAttribute,但最近的Transfer 表将包含每个系统的多个传输。
【问题讨论】:
标签: sql sql-server sql-server-2008 select join