2017-01-09 7 views
0

2つのテーブルの間に2つの関係があります。最初の表はPersonnel、次の表はEquipmentです。テーブル間の複数の関係

PersonnelにはEquipmentという2つの接続があり、1つはレンタルした人物、もう1つは機器を追加した人物です。

機器を持っている人についての質問を書くたびに、名前と姓を尋ねるたびに、それを私に追加した人が表示されます。

「接続」を1つだけ使用するにはどうすればよいですか?

+1

質問にテーブルのスキーマを追加してください。 – reaanb

+0

...入力、出力、および望ましい出力のためのいくつかの照会およびサンプル表の値。 [ask]と[mcve] sについて読んでください。 PS外部キー(「関係」)はクエリとは関係ありません。彼らは、DBMSに、ある列の値も他の列の値でなければならないと伝えます。表(ベースまたは照会結果)は、アプリケーション関係/アソシエーションを表します。各テーブル(ベースとクエリ)に対して、テーブル内にあることによってアプリケーションについて行が何を言うかを与えることで、それを与えます。 – philipxy

答えて

0

リレーショナル表(ベースまたは照会結果)は、アプリケーション関係/アソシエーションを表します。値が関連している行を保持します。つまり、具体化命題(ステートメント)を特性化述語(ステートメントテンプレート)から作成します。

-- ID identifies a person named FNAME LNAME and ... 
Personnel(id, fname, lname, ...) 
-- equipment ID was added by person AID and rented by person RID and ... 
Equipment(id, aid, rid, ...) 

我々は基本述語、論理演算子と条件からクエリ結果の述語を構築:

あなたのベースが&の表のようなものです述語。その述語を満たす行を戻す照会式を得るには、基本述部を対応する基本演算子で置き換え、対応する関係演算子で論理演算子を置き換えます。ファーストネーム名を持つ人が装置77を追加し

行:姓のANAMEと人物AIDによって追加された最後の名前NAMEレンタル機器と人物ID

/* rows where 
for some e.ID, ..., p.ID, ..., 
    p.FNAME = NAME 
and equipment e.ID was added by person e.AID and rented by person e.RID and ... 
and p.ID identifies a person named p.FNAME p.LNAME and ... 
and p.ID = e.AID 
and e.ID = 77 
*/ 
select p.fname as name 
from Equipment e join Personnel p on p.id = e.aid 
where e.id = 77 

行:

/* rows where 
for some e.ID, ..., r.ID, ..., a.ID, ..., 
    r.ID = ID and r.LNAME = NAME and a.ID = AID and a.LNAME = ANAME 
and equipment e.ID was added by person e.AID and rented by person e.RID and ... 
and r.ID identifies a person named r.FNAME r.LNAME and ... 
and r.ID = e.RID 
and a.ID identifies a person named a.FNAME a.LNAME and ... 
and a.ID = e.AID 
*/ 
select r.id, r.lname as name, a.id as aid, a.lname as aname 
from Equipment e 
join Personnel r on r.id = e.rid 
join Personnel a on a.id = e.aid 

エイリアスのプレフィックスは、そのエイリアスが付いたテーブル名になります。基本述語のANDはJOINになります。条件のANDはONまたはWHEREになります。接頭辞付きの列に対する結果列の同一性は、暗黙的または明示的なASになります。 Is there any rule of thumb to construct SQL query from a human-readable description?

FK(外部キー)は、一般的には間違いなく「関係」と呼ばれます。照会するFKを知る必要はありません。彼らは、特定の列の値も特定の他の列の値でなければならないことをDBMSに伝えます。 (完全性と最適化のため)FKは実際にインスタンスメタの関係/関連テーブルに対応します。 (等価的には述語相当、の関係/アソシエーション)特定の他の列の値でなければならない述語を持つ特定のDBMSメタデータ表で表される。

関連する問題