然后在表中存在返回更多行的内部联接

时间:2012-09-12 13:28:00

标签: sql-server tsql

直到今天我对内连接的想法是它将返回满足连接条件的表中存在的最小行数。

例如如果表格A 包含4行而表格B 包含7行。我希望如果它们满足连接条件,那么4行可以是最大输出。

我刚刚编写了一个sp,其中我正在创建两个临时表并填充它们。然后我采取了他们的内部连接,但返回更多行(在我的情况下29行返回我期待4) 经过一番搜索,我找到了这个 link

确认我可以发生,但我仍然想知道我的选项是什么来限制返回的结果。

以下是我的存储过程。

ALTER PROCEDURE [dbo].[GetDDFDetailOnSiteCol]
@siteId int,
@colNum int
AS
BEGIN
SET NOCOUNT ON;

create Table #portDetail
(
ddfId int,
portDetail nvarchar(50),
siteId int
)
Insert into #portDetail SELECT  ddf.id,  ddf.portDetail, site.Site_ID  from site
        inner join ddf ON site.Site_ID = ddf.siteCodeID 
        where ddf.siteCodeID = @siteId and ddf.colNo= @colNum
        order by colNo,blockNum,portRowNum,portColNum

create Table #portAllocationDetail
(
assigned_slot nvarchar(50),
siteId int
)
Insert into #portAllocationDetail 
SELECT  dbo.portList.assigned_slot, dbo.site.Site_ID
FROM dbo.portList INNER JOIN
 dbo.site ON dbo.portList.siteCodeID = dbo.site.Site_ID
 where dbo.site.Site_ID = @siteId

--select * from #portAllocationDetail   
Select #portDetail.ddfId,#portDetail.portDetail,#portAllocationDetail.siteId,#portAllocationDetail.assigned_slot FROM #portDetail 
INNER JOIN #portAllocationDetail 
ON
#portDetail.siteId = #portAllocationDetail.siteId
END

3 个答案:

答案 0 :(得分:12)

对于TableA中的每一行,inner join重复表中的每个匹配行。因此,如果TableA中有4行,TableA中有7行,则最大行数为28。

Example at SQL Fiddle.

答案 1 :(得分:-1)

----------内连接意味着 - 当两个表中至少有一个匹配时,INNER JOIN关键字返回行.---------------- -

答案 2 :(得分:-1)

内部联接也会导致重复。

如果要从两个表中获得唯一的公用值,请使用相交运算符。

因此,如果相交的两侧都为空,则该相交甚至可以显示空值。