cm0*_*007 2 sql one-to-many many-to-one sql-server-2008 sql-server-2008-r2
我有以下表格:
create table TableA (
Id int primary key identity,
Name varchar(80) not null
)
create table TableB (
Id int primary key identity,
TableA_Id int not null foreign key references TableA(Id),
Value varchar(80) not null
)
Run Code Online (Sandbox Code Playgroud)
我想写一个类似的查询
select TableA.Name, TableB.Value
from TableA
inner join TableB on TableA.Id = TableB.TableA_Id
where TableA.Name like 'a%'
order by TableB.Value asc
Run Code Online (Sandbox Code Playgroud)
除了我只想要每个TableA_Id中的前10名TableB.Value(按TableB.Value升序排序).
而不是每个TableB.Value都返回TableA.Name,我只想要每个的前10个值TableA.Name.
这样的查询会是什么?
用一个CROSS APPLY.
A CROSS APPLY允许你
TOP在子选择中使用aORDER BY在子选择中使用anSQL语句
SELECT TableA.Name
, b.Value
FROM TableA
CROSS APPLY (
SELECT TOP 10 *
FROM TableB
WHERE TableA.Id = TableB.TableA_Id
ORDER BY
TableB.Value
) b
WHERE TableA.Name LIKE 'a%'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1556 次 |
| 最近记录: |