0

外部キーは初めてですが、概念はよく理解しています。

それらを作成/削除する方法に関する多くのドキュメントを見つけましたが、それらの使用方法については知りません。私のスキーマは次のとおりです。

在庫表:

パーツ ID | モデル | モデル | タイプ | ベンダー
------------------------------
1 | DDr2 | ラム | ショップ1
2 | DDr3 | ラム | ショップ1
3 | WD1 | HDD | ショップ2
4 | WD2 | HDD | ショップ2

次に製品表

製品 ID | 名前 | パート ID1 | パーツID2 ...
1 | PC1 | 1 | 2
2 | PC1 | 3 | 4

どうやっselectて手に入れるの?

| PC1 | DDr2 | DDR3 |
| PC1 | WD1  | WD2  |

外部キーが主キーにリンクされていますPartID2か?PartID3PartID

4

5 に答える 5

3

外部キーの概念は、あるテーブルのIDを別のテーブルの一意のIDのリスクにリンクすることです。この例では、一意のIDを持つ一意のパーツと、それらのパーツを使用できる製品があるため、製品テーブルでは、複数の行で複数のパーツIDを使用できます。

外部キーは、データベース内の参照整合性を維持するために使用されます。結合を使用して、必要なデータを取得できます。

SELECT A.NAME,
       B.Model,
       C.Model
FROM PRODUCTS A
       INNER JOIN PARTS B ON B.PARTID1 = A.PARTID
       INNER JOIN PARTS C ON C.PARTID1 = A.PARTID
WHERE A.PRODID = 1     
于 2012-04-26T16:33:43.957 に答える
1

簡単な答えは、あなたができることです

 select p.name, a.model as part1, b.model as part2, c.model as part3 
   from product p, stock a, stock b, stock c 
   where p.partid1 = a.partid and p.partid2 = b.partid and p.partid3 = c.partid

より長い答えは、これはあなたがやろうとしていることにとって本当に良いテーブル設計ではないということです. どのアイテムに対しても常に固定数のパーツがある (または、少なくとも固定数を超えない) ことを前提としています。より良い設計は次のようになります。

Part Table:
partID | model | type | vendor

Product Table:
productID | name

Product_Parts Table:
productID | partID

ここで、Product_parts の productID は Product への外部キーであり、partID は Part テーブルへの外部キーです。

于 2012-04-26T16:30:20.893 に答える
0
SELECT s1.Name, p1.Model, p2.Model FROM stock st 
    INNER JOIN product p1
       ON st.PartID1 = p1.PartID1
          INNER JOIN product p2
             ON st.PartID2 = p2.PartID1

最初に在庫と部品テーブルを結合し、次にこの結合の結果を部品テーブルに結合するときに JOIN を 1 つ実行します。

SQL パーサーはパーツ テーブルを 2 つの別個のテーブルとして使用するため、同じテーブルから 2 つの結果を 1 つの行に表示できます。

于 2012-04-26T16:26:06.753 に答える
0

同じ sql ステートメントでテーブルに複数回参加できます。この場合、製品の各部品の名前を取得するために、在庫テーブルに 2 回参加する必要があります。

SELECT pr.ProdID, s1.Model, s2.Model
FROM Product pr, Stock s1, Stock s2
WHERE pr.PartID1 = s1.PartID
AND pr.PartID2 = s2.PartID
于 2012-04-26T16:27:14.147 に答える
0

a を使用すると、またはの値が NULL に設定されているLEFT OUTER JOIN場合でも製品が返されます。Part1IDPart2ID

SELECT          P.Name,
                S1.Model,
                S2.Model
FROM            Product P
LEFT OUTER JOIN Stock S1 ON P.PartID1 = S1.PartID
INNER JOIN      Stock S2 ON P.PartID2 = S2.PartID
于 2012-04-26T16:28:26.097 に答える