2017-09-01 8 views
0

私は車を借りることに関するDBを持っています。別のテーブルでテーブルを伸ばして...

私はCarModelsテーブル(ModelIDをPKとして)を作成しました。

CarModelsと同じ主キーを持つ2番目のテーブルを作成したいとします。 この表には、このモデルが検索された回数が含まれています私のウェブサイトで。

私のウェブサイトにアクセスすると、レンタルした一般的な自動車を含むリストを確認できます。 「最も人気のある車」の表。

これは確かに1対1の関係ではありません。 2つのプライマリキーを一緒に接続するSQLコードはありますか?

+1

左外部結合 – GuidoG

+0

あなたは別のテーブルを必要としません。ModelIDのレンタルテーブルはありますか? – JamieD77

答えて

2
select m.ModelID, m.Field1, m.Field2, 
     t.TimesSearched 
from CarModels m 
    left outer join Table2 t on m.ModelID = t.ModelID 

なぜ、テーブルCarModelsに[TimesSearched]フィールドを追加するだけですか?
他のテーブルは必要ありません

+0

1つの列に対して新しいテーブルを作成するのは間違いありません。 –

0

あなたは何も拡張していません(テーブルの実際のモデルを修正しています)。主キーが等しいテーブルのINNER JOINを同じにするだけです。

これは示唆されているように外側の結合になる可能性がありますが、1:1のように言えば(2番目のテーブルは全く同じキーを持っています - 私はそれらをすべて仮定します)、内部は両方のテーブルが同じプリムキーの同じセット。

ボーナスとして、すべてのPKに一致しなかった場合に、すべてのキーが素晴らしいリマインダと一致しない場合は、行が少なくなります。

言われているように、同じテーブルに上記の番号を保持しない理由がありますか?

拡張可能(これはテーブルモデルを拡張しています)で、その番号を保持する整数の追加属性で拡張することができます。

簡素化とクエリ時間の短縮のために、後でお勧めします。

+0

あなたは、1つの列に対して新しいテーブルを作成することが正しいと思います。 –

0

最も簡単なのは、[CarModelID] INT NOT NULLのように、CarModelsテーブルへの外部キーを持つ新しいテーブルで新しいプライマリキーを使用するのが最も簡単です。インデックスとユニーク制約をFKに置くことができます。

あなたがそれらを同じにしたい場合は、CarModelsテーブルからテーブルを作成し、そのフィールドをプライマリキーとして設定するなど、あなたの人生を変えてくれるたくさんのフープを飛び越えることができます。新しいCarModelを追加すると、SET IDENTITY_INSERT ONというトリガーを作成して新しいものを追加できるので、完了したらSET IDENTITY_INSERT OFFを覚えておいてください。

個人的には、ThisUserがThisDateでThisCarModelを選択したCarsSearchedテーブルを作成します。[特定の郵便番号や年中に人気のある車がいくつかありますか? [この会社は毎年3月に3台の車を借りているので、1月にクーポンを送付する]。

関連する問題