2016-01-31 333 views
3

我想連接3個表。在其中一個我必須使用複合主鍵。我知道,如何處理單身。我有以下表格進行連接:SQL雙主鍵,多對多關係

CREATE TABLE Med_list 
(
    ID_med_list INT IDENTITY(200001,1) , 
    No_med_list INT, 
    ID_med INT REFERENCES Med(ID_med), 

    PRIMARY KEY(ID_med_list, No_med_list) 
) 

CREATE TABLE Med 
(
    ID_med INT IDENTITY(3001,1) PRIMARY KEY , 
    Name VARCHAR(20) 
) 

CREATE TABLE Visit 
(
    ID_Visit INT IDENTITY(600001,1) PRIMARY KEY, 
    ID_patient INT REFERENCES Patients(ID_patient), 
    Visit_date Datetime, 
    ID_med_duty INT, 
    No_med_list INT 
) 

我想每個病人在一次就診時可能有多種藥物。我不知道如何連接表VisitMed_list SQL Server可以接受的方式。 預先感謝您的每一個提示或幫助:)

+0

什麼是'Med_list.No_med_list'的目的是什麼?該表在ID_med_list上是唯一的,所以我認爲你的主鍵太鬆了。 –

回答

1

您需要一個多對多的關係,如果Med_list應該是這種關係(藥物訪問),那麼你只是缺少一個指向訪問的外鍵所以表格關係看起來像這樣

患者。 < ---訪問。 < --- Med_list。 --->吃藥

像這樣的表:

CREATE TABLE Med_list 
(
    ID_med_list INT IDENTITY(200001,1) , 
    No_med_list INT, 
    ID_med INT REFERENCES Med(ID_med), 
    ID_Visit INT REFERENCES Visit(ID_Visit) 
    PRIMARY KEY(ID_med_list, No_med_list) 
) 

CREATE TABLE Med 
(
    ID_med INT IDENTITY(3001,1) PRIMARY KEY , 
    Name VARCHAR(20) 
) 

CREATE TABLE Visit 
(
    ID_Visit INT IDENTITY(600001,1) PRIMARY KEY, 
    ID_patient INT REFERENCES Patients(ID_patient), 
    Visit_date Datetime, 
    ID_med_duty INT, 
    No_med_list INT 
) 

而且你的查詢可以是這樣的

Select * From patients p 
Join Visit v on v.ID_Patient = p.ID_Patient 
Join Med_list ml on ml.ID_Visit = v.ID_Visit 
Join Med m on m.ID_med = ml.ID_med 
+0

我應該改變我的代碼中的任何東西嗎?這只是其中的一部分。它不會是一個整體的一部分。 – compatibilizator

+1

是的,我編輯了我的回覆,可能有一些列不需要,但是因爲我不知道整個數據庫結構,所以我把它們留在了那裏。 – ArturoAP

0

你可以試試這個

我也是新的多對一一對多的關係查詢。

SQLFiddle Example

SELECT 
    P.name, 
    M.Name 
FROM 
    med_list ML 
LEFT JOIN med M ON m.ID_med=ML.ID_med 
LEFT JOIN visit V ON V.ID_Visit=ML.ID_Visit 
LEFT JOIN patients P ON P.ID_patient=V.ID_patient