0

これは、最新のデータベース管理テキストの第 12 章からのものです。与えられた:

Supplier_T(SupplierNumber,City)                10,000 records, stored in Detroit
Part_T(PartNumber, Color)                      100,000 records, stored in Chicago
Shipment_T(SupplierNumber, PartNumber)         1,000,000 records, stored in Detroit

SQL で記述されたクエリは、赤い部品のクリーブランド サプライヤーのサプライヤー番号を一覧表示するために作成されます。19 ページは次のとおりです。

SELECT Supplier_T.SupplierNumber
FROM Supplier_T, Shipment_T, Part_T
WHERE Supplier_T.City = 'Cleveland'
AND Shipment_T.PartNumber = Part_T.PartNumber
AND Part_T.Color = 'Red';

でも、WHERE句に抜けていませんか?

AND Supplier_T.SupplierNumber = Shipment_T.SupplierNumber

多分私はあまりにも衒学的です。

4

1 に答える 1

1

テーブル間の結合を忘れたときに何が起こるかを示すために、この例が与えられている可能性があります! これはデカルト結合と呼ばれ、その結果、すべての行が他のすべての行に結合され、予想よりもはるかに大きな結果セットが生成されます。

クエリのポイントがクリーブランドに保存されている赤い部分を表示することである場合、クエリは次のようになると思います

SELECT Supplier_T.SupplierNumber
FROM Supplier_T
inner join Shipment_T on Shipment_T.suppliernumber = supplier_t.suppliernumber
inner join Part_T on Part_T.PartNumber = Shipment_T.PartNumber
WHERE Supplier_T.City = 'Cleveland'
AND Part_T.Color = 'Red';  

クエリが SQL-92 の明示的な結合構文 (table1 内部結合 table2 から) ではなく、SQL-89 の暗黙的な結合構文 (table1、table2、table3 から) を使用しているという事実は、何かが間違っていることを示唆しているはずです! このクエリののテキストには何が書かれていますか?

于 2013-05-04T04:26:30.283 に答える