2012-03-15 16 views
2

データベース内に2つのテーブルを作成する割り当てがあります。テーブルはこのように見えます。あるテーブルのIDを別のテーブルのデータにリンクする

ContactPerson(ID、Forename、姓、電子メール、PhoneNumberの) カンパニー(ID、会社名)

今私の問題は、私は特定の会社にContactPersonをリンクしなければならないことですが、私はそれらを持つことはできません同じテーブルに

私は、私は1つのクエリで両方のテーブルを表示するために結合文を使用することができることを理解しますが、私は私のasp.netのプロジェクトにこのdatabseを実装する際にどの会社にリンクしている人を知っているデータベースを必要としています。

どうすればよいですか?

答えて

1

特定の会社からのすべての人々を選択するあなたは、「特定の」会社を言いました。その後、

ユーザーテーブルに列を入れて(あなたのIDはint型と仮定)

ALTER TABLE ContactPerson 
ADD CompanyID int 
...企業IDと呼ば と、次の外部キーを作成します。

ALTER TABLE [dbo].ContactPerson 
    ADD CONSTRAINT [FK_ContactPerson_Company] 
    FOREIGN KEY (CompanyID) 
    REFERENCES Company (ID) 

シャークがあれば正しいですあなたは多対多の関係が必要です。 「あなたは外部キー制約を適用する必要はありませんが、あなたはドン場合ContactPerson FROM 企業ID = X

SELECT * :企業内のすべての人々を取得するには

すべての "制約"はあなたのためにルールを実行します。言い換えれば、あなたの質問が示唆しているように、「どんな人がどの会社にいるかをSQLに確かめさせる」ことです。

上記のクエリは、外部キー制約なしに動作しますが、その後、あなたのデータベースが関係について「知りません」。

..and私が試してみて、存在していない企業IDを持つ人を挿入した場合、SQLは、(これは良いことです)、エラーがスローされます。

+0

はいすべての人は1つの会社にリンクする必要があります。しかし、すべての企業は、それにリンクされた複数の人を持つことができます。 キーはどのように機能しますか?私は以前は鍵で働いたことがありません。 – Joel

+0

外部キーは、あるテーブルのカラムを別のテーブルのカラムにリンクするようSQLに指示する方法です。外来の鍵は私があなたの仕事が約あると想像しているものです。 – Gats

+0

よかった、ありがとう! – Joel

0

これは1対多の関係であるので、私は一般的にContactPerson表にそのデータを入れてしまうでしょう。しかし、あなたが明示的に言うので、あなたは、その後、ちょうど結合テーブルを作成することはできません。

create table ContactPersonCompany 
(
    ContactPersonID int not null foreign key references ContactPerson(ID), 
    CompanyID int not null foreign key references Company(ID) 
) 

は今、あなたは ContactPersonCompanyとの関係を持っています。

例:私はあなたが一人につき一つの会社を持っていると仮定しているので、

select 
    cp.Surname, 
    cp.Forename 
from ContactPerson cp 
inner join ContactPersonCompany cpc 
on cp.ID = cpc.ContactPersonID 
inner join Company c 
on cpc.CompanyID = c.ID 
where c.CompanyName = 'Some Company' 
関連する問題