13

今日まで、内部結合についての私の考えは、結合条件を満たすテーブルに存在する行の最小数を返すことでした。

元。テーブルAに4行が含まれ、テーブルBに7行が含まれる場合。結合条件を満たす場合、4行が最大出力になると期待していました。

2つの一時テーブルを作成し、それらにデータを入力するspを作成しました。それから私はそれらの内部結合を取りましたが、より多くの行を返しました(私の場合、29行が返されました私は4を期待していました)いくつかの検索の後、私はこの リンクを見つけました

これは私が起こる可能性があることを確認しますが、返される結果を制限するための私のオプションは何ですか?

以下は私のストアドプロシージャです。

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
4

4 に答える 4

25

TableAinner joinの行ごとに、TableBの一致する各行を繰り返します。したがって、TableAに4行、TableBに7行ある場合、最大行数は28です。

SQLフィドルでの例。

于 2012-09-12T13:35:25.980 に答える
0

内部結合は、条件を満たすテーブルのデカルト積のサブセットを返します。したがって、行nとmがあり、条件がTrueの2つのテーブルAとBの場合、結合はnxm行を返し、これが最大値になります。

正しい用語を使用すれば、この説明がいかに簡単になるかは信じられないほどですが、ほとんどのチュートリアルで説明されている「簡単な方法」を理解するには、はるかに時間がかかります:(。

于 2022-01-05T01:38:48.867 に答える
-2

----------内部結合とは-INNERJOINキーワードは、両方のテーブルに少なくとも1つの一致がある場合に行を返します。-----------------

于 2013-01-11T11:03:55.323 に答える
-2

内部結合も重複します。

両方のテーブルから一意の共通値が必要な場合は、intersect演算子を使用してください。

したがって、ここで交差する場合は、両側がnullの場合、null値を表示することもできます。

于 2019-04-25T17:12:10.750 に答える