0

我想说

select col1,col2,col3 
from table1 
   inner join table2 on table1.col1=table2.col1 
                        and ..... ( ?  )

? :我只想要 1 条记录或来自 table1 的第一条记录与来自 table2 的第一条记录连接。但是该命令会导致所有可以加入的记录加入。例如,如果 table1 中有 2 条记录col1 =1432并且table2中只有 1 条记录存在 col1=1432命令全部加入。但我想先从 table1 加入,然后从 table2 加入

我想显示所有要加入的多于 1 条记录的记录。

4

3 回答 3

0

如果您使用的是 SQL Server 2005 或更高版本,您可以尝试使用排名功能来仅获取每组的第一条记录:

select *
from (
        select a.col1
            , a.col2
            , a.col3
            -- Use the order by to determine which rows will be ranked first for each group
            , row_number() over (partition by a.col1 order by a.col2) as rownum
        from table1 as a
            join table2 as b on a.col1 = b.col1
    ) as q
where rownum = 1 -- Only get the first row of each group

我想显示所有要加入的多于 1 条记录的记录。

您可以将其添加到您的 where 子句中:

    and exists (
        select col1
        from table1
        where col1 = q.col1
        group by col1
        having count(*) > 1         
    )

为了提供另一种不使用排名功能的解决方案,我认为我们需要更多地了解您的表,尤其是唯一键以及您如何定义每个组的第一条记录。

于 2013-04-10T12:05:43.030 回答
0

我只想要来自 table1 的 1 条记录或第一条记录与来自 table2 的第一条记录连接

干得好:

select top 1 col1,col2,col3 
from table1 
   inner join table2 on table1.col1=table2.col1 
                        and ..... 
于 2013-04-10T11:43:31.047 回答
0

试试这个查询 -

SELECT *
FROM dbo.table1 t1 
JOIN (
SELECT TOP 1 *
FROM dbo.table2 
) t2 ON t1.col1 = t2.col1
于 2013-04-10T12:00:37.983 回答