use*_*673 1 sql t-sql sql-server
我需要使用t-sql来查询两个表.第一个表是Books.第二个表是作者.对于每个Book记录,可能有多个子作者记录.我想编写一个查询,只返回为当前Book记录找到的第一个作者记录.表中有数十万条记录,因此我需要查询才能有效.
select a.FirstName, a.LastName, b.BookName
from Books b
left join
(
select TOP 1 t.BookID, t.FirstName, t.LastName
from Authors t
) a
on a.BookID = b.BookID
where b.BookClassification = 2
Run Code Online (Sandbox Code Playgroud)
这个查询不对.我只想在作者中选择与BookID匹配的前1个记录.我怎样才能得到我想要的结果?
你很亲密:
select a.FirstName, a.LastName, b.BookName
from Books b
outer apply
(
select TOP 1 t.BookID, t.FirstName, t.LastName
from Authors t
WHERE t.BookID = b.BookID
-- uncomment the next line to control which author to prefer
-- ORDER BY t.<someColumn>...
) a
where b.BookClassification = 2
Run Code Online (Sandbox Code Playgroud)
虽然对我来说似乎很奇怪,作者会成为书籍的孩子...... :)