私は2つのテーブルを作成しましたが、いくつかの奇妙な理由から予想外のレコードが返されています。SQL Server内部結合重複レコードの作成
表1は、「バージョン1」の2つのレコード、「バージョン2」の2つのレコード、「バージョン3」の2つのレコードを含む6つのレコードを含む。表2は、「バージョン1」の10個のレコードを含む10個のレコードを有する。私がバージョンフィールドでそれらの間の内部結合を行う場合、私は2レコードしか得られないだろうと思ったでしょう:表1と表2は、表1に2つしかない「バージョン1」と一致します。
ただし、次のクエリは、20件のレコードを返します(どちらかといえば私でしそれが参加交差に変換するなら60を記録、また間違っているだろう理解の):誰もが何が起こっているかについて説明することができます
SELECT * FROM TABLE2 T2 INNER JOIN TABLE1 T1 on T2.VersionKey = T1.VersionKey
?
私は期待通りの結果を得ていますが、私はここで違いを見ることができません非常に似ている別のセットのテーブルがあります。
ここには基本的なテーブル構造とデータがあります。
CREATE TABLE [dbo].[Table1] (
[ID] [int] IDENTITY(1,1) NOT NULL,
[VersionKey] [int] NULL,
CONSTRAINT [PK_Table1] PRIMARY KEY CLUSTERED ([ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [dbo].[Table2] (
[ID] [int] IDENTITY(1,1) NOT NULL,
[VersionKey] [int] NULL,
CONSTRAINT [PK_Table2] PRIMARY KEY CLUSTERED ([ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT INTO [Table1] (VersionKey)
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 3
GO
INSERT INTO [Table2] (VersionKey)
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION ALL
SELECT 1 UNION
SELECT 1
GO
Werid。余分なコメント。私はちょうど真新しいデータベースで上記を行いました、そして、私が期待したようにそれは変わりつつあります。しかし、私の既存のデータベースではそれはまだ正しくありません。私はフラッシュするかリフレッシュする必要がありますか? – ptownbro
20行は、表示されたデータの期待通りの正しい結果です。 –
INNER JOINはプライマリに1対1を作成していますが、これは2つのマッチを持ちます。したがって、2 x 10 = 20.重複を望まない場合は、それらをグループ化したり、一意に選択したりすることができます。 –