2017-02-09 6 views
0

SQL ServerにNorthwindをインストールしました。私は3つのテーブルを結合するこの簡単なクエリをセットアップしました。私は3つのテーブルに参加しようとしており、完全に理解できない結果を得ようとしています

SELECT SUPP.SupplierID, CompanyName, ContactName, ProductName, CategoryID, OrderID, ORD.ProductID 
FROM Suppliers as SUPP 
INNER JOIN Products as PROD 
ON SUPP.SupplierID=PROD.SupplierID 
INNER JOIN [Order Details] as ORD 
On PROD.ProductID=PROD.ProductID; 

合計165935件のレコードがあります。私はそれがはるかに、はるかに少ないだろうと思った。私はここに何か基本的なものが欠けていると思うけど、何が確実なのか分からない。デカルト製品ではないことは分かっていますが、私はそれが何であるか分かりません。

ここにスキーマがあります。

https://northwinddatabase.codeplex.com/

私はそれが最大のテーブル内のレコードの最大数であるとして、任意の以上2155件のレコードを期待し、最も可能性が高いではないだろう、私は2155

よりもはるかに少ない取得する必要があります。SELECT () [受注明細]。[DBO]。[NORTHWND] FROM SELECT COUNT() [NORTHWND] FROM [DBO]。[製品] SELECT COUNT(*) [NORTHWND] FROMを数えます。[ dbo]。[Suppliers]

ここで間違っていることを教えてください。

ありがとうございます!

私は以下のスクリプトが正常に動作し、私は2155年の記録を与え、私が期待するものである(または少ない)...

を私のOPを編集しています。

SELECT [Order Details].OrderID, [Order Details].ProductID, Products.ProductID AS Expr1, Products.SupplierID, Suppliers.SupplierID AS Expr2, Suppliers.CompanyName 
FROM [Order Details] 
INNER JOIN 
Products ON [Order Details].ProductID = Products.ProductID 
INNER JOIN 
Suppliers ON Products.SupplierID = Suppliers.SupplierID 

私は、この結果を得るために 'エディタでデザインクエリ'ツールを使用しました。私は実際には、GUIツールに頼るのではなく、SQLの各キャラクタを束ねることで、これを実現しようとしていました...

+0

あなたの質問と結果は私にはよく見えます。たぶんあなたは実際にどのような出力を記述することができます。ところで、あなたはデカルト製品をやっていません。 –

+2

'On PROD.ProductID = PROD.ProductID;'は間違っています – Ghost

答えて

0

ゴースト、あなたは正しいです!ここに最終結果があります。

SELECT SUPP.SupplierID, CompanyName, ContactName, ProductName, CategoryID, OrderID, ORD.ProductID 
FROM Suppliers as SUPP 
INNER JOIN Products as PROD 
ON SUPP.SupplierID=PROD.SupplierID 
INNER JOIN [Order Details] as ORD 
On ORD.ProductID=PROD.ProductID; 

愚かな間違いです。私の唯一の言い訳は、私が質問を設定していたとき、私の8ヶ月の赤ん坊の男の子が私を混乱させていたことです。今は理にかなっている。それが私が探していたものです。どうもありがとうございます!

関連する問題