加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 如何加入子查询的第一行?

发布时间:2020-12-12 16:09:43 所属栏目:MsSql教程 来源:网络整理
导读:我有一张发票表和一个关键数据相关数据的子表.特别是,对于每张发票,我只对子表中的第一个相关行感兴趣.鉴于我想要每个发票密钥的一个相关行 – 我该如何实现? Select i.[Invoice Number],c.[Carrier Name]From Invoice i Left Join Carriers c on i.[Invoice
我有一张发票表和一个关键数据相关数据的子表.特别是,对于每张发票,我只对子表中的第一个相关行感兴趣.鉴于我想要每个发票密钥的一个相关行 – 我该如何实现?
Select i.[Invoice Number],c.[Carrier Name]
From Invoice i
    Left Join Carriers c on i.[InvoiceKey] = c.[InvoiceKey]
Where -- what?

我猜在语义上,我正在寻找类似于InvoiceKey的Top 1 c.CarrierName Group的概念的东西(或者如果在T-SQL中可能的话,那么它的概念是什么).

我想过在子查询上做一个左连接,但是似乎效率并不高.有没有人有任何T-SQL技巧来有效地实现这一点?

编辑:对不起,我忘了提到这是SQL Server 2000,所以当我要放弃当前的SQL Server 2005/2008响应,这将是有效的,我不能接受他们恐怕.

解决方法

只要操作符有一个PRIMARY KEY称为id:
SELECT  i.[Invoice Number],c.[Carrier Name]
FROM    Invoice i
JOIN    Carriers c
ON      c.id = 
        (
        SELECT  TOP 1 ID
        FROM    Carriers ci
        WHERE   ci.InvoiceKey = i.InvoiceKey
        ORDER BY
                id -- or whatever
        )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读