想要从内部联接中获取只能传回多条记录的1条记录

时间:2016-03-11 20:00:25

标签: sql sql-server

我有以下SQL查询:

SELECT * 
FROM My_TABL wr 
INNER JOIN His_TABL pk ON (wr.Company = pk.company AND wr.NUMBER = pk.number)
WHERE wr.NUMBER = 'L00499233' 
  AND wr.S_CODE IN ('in', 'ji', 'je')

我想找回1条记录,但发现它可以传回多条记录,因为一条记录可以有超过1个带有'in','ji'和'je'的字段 我怎样才能选择第一个?感谢。

2 个答案:

答案 0 :(得分:1)

如果目标是加入联接的前1个匹配(最终返回多行),请使用OUTER APPLY

SELECT  *
FROM    My_TABL wr
OUTER APPLY ( SELECT TOP 1 * FROM His_TABL pk WHERE wr.Company = pk.company
                            AND wr.NUMBER = pk.number ) AS pk2
WHERE   wr.NUMBER = 'L00499233'
        AND wr.S_CODE IN ( 'in', 'ji', 'je' );

但是,如果目标是仅在结果集中返回一行,请使用Stuart的建议。

答案 1 :(得分:0)

如果您想要哪一行并不重要,可以使用TOP 1:

select TOP 1 * from My_TABL wr 
inner join His_TABL pk on (wr.Company = pk.company and wr.NUMBER = pk.number)
where wr.NUMBER = 'L00499233' and wr.S_CODE in ('in', 'ji', 'je')

请注意,您应该不再使用SELECT *,并且要更准确地了解要检索的行和列。