SQL Server - 选择内部联接中的前2名

时间:2014-06-02 05:21:28

标签: sql-server sql-server-2005 select

我是sql server的新手,我正在加入两个表。问题是一个表说[TABLE1]只有一行,但另一个表说[TABLE2]可以有很多行。

我想创建一个Query,它可以从TABLE1中检索1行,从TABLE2中检索2个顶行。

注意:两个表都有1个公共列,所以我创建了Join。

我尝试使用TOP 2 - 但这没效果

    select T1.Col1 , Top 2 T2.Col1, ....
    from TABLE1 T1
    inner join TABLE2 T2
    ON T1.commonRow =  T2.commonRow

以下是table1& amp;的结构。表2

    TABLE 1      TABLE2 
    -----------------------------
     DATA        COMMENTS 1
                 COMMENTS 2
                 COMMENTS 3
                 COMMENTS 4

可以帮助一下!!

2 个答案:

答案 0 :(得分:1)

TOP关键字需要在SELECT之后和列名之前。

请参阅SQL Server联机丛书> SELECT子句(Transact-SQL)>语法。

您不需要子查询。所以这应该有用。

SELECT TOP(2) T1.Col1 , T2.Col1, ....
    FROM Table1 T1
        INNER JOIN Table2 T2
            ON T1.commonRow =  T2.commonRow;

请注意,目前的做法是在TOP之后使用括号。

通常你会指定一个ORDER BY子句,所以TOP很多很有意义。

请参阅SQL Server联机丛书> TOP(Transact-SQL)。

例如,使用AdventureWorks示例数据库:

SELECT TOP(5) H.CustomerID, D.OrderQty
    FROM Sales.SalesOrderHeader H
        INNER JOIN Sales.SalesOrderDetail D
            ON D.SalesOrderID = H.SalesOrderID
    ORDER BY D.OrderQty DESC;

结果是:

CustomerID  OrderQty
----------- --------
29818       44
29580       41
29913       40
29818       40
29913       39

(5 row(s) affected)

答案 1 :(得分:0)

您可以尝试这样

select  T1.Col1 ,T2.Col1, ....
from TABLE1 T1
inner join (SELECT TOP(2)* FROM TABLE2) T2
ON T1.commonRow =  T2.commonRow