SQL双主键,多对多关系

时间:2016-01-31 12:37:30

标签: sql sql-server

我想连接3张桌子。在其中一个中,我必须使用复合主键。我知道,如何应对单身。我有以下表格连接:

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
)

我希望每位患者在一次就诊期间可以服用多种药物。我不知道如何以SQL Server可接受的方式连接表VisitMed_list。 提前感谢您的每一个提示或帮助:)

2 个答案:

答案 0 :(得分:1)

你需要多对多关系,如果Med_list应该是这种关系(医学访问)那么你只缺少一个指向访问的外键,所以表关系看起来像这样

患者。 < ---访问。 < --- Med_list。 --->吃药

这样的表格:

javac nameOfTheClass.java
java nameOfTheClass

您的查询可能如下所示

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
)

答案 1 :(得分: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