如何为查询编写T-SQL代码

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个记录.我怎样才能得到我想要的结果?

RBa*_*ung 6

你很亲密:

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)

虽然对我来说似乎很奇怪,作者会成为书籍的孩子...... :)