2017-04-03 34 views
-1

我有两个表Patient和Details。患者与具有外键的详细信息相关。在患者中,一个用户可以具有多个Details值。mysql如何在单列中插入多个值

我想:

INSERT INTO `Patients` 
     (`patientId`, `name`, `address`, `etage`, 
     `Door`, `Elevator`, `key_number`, `medicineId`, `lid`, 
     `doctorId`) 
VALUES (109, 'Muller', 'bla bla bla ', 3, 
      'links' , 1 , 'S12' ,'m9' , '{02.0 , 2.10 ,2.30}' , 
      'D11'); 

当我尝试插入,我得到以下错误:

Cannot add or update a child row: a foreign key constraint fails (Sanitas . Patients , CONSTRAINT Patients_ibfk_2 FOREIGN KEY (lid) REFERENCES Details (lid))

+0

我看你最好向我们展示了这两个表 – RiggsFolly

+1

价值'的模式“{02.0,2.10,2.30}”'不喜欢看值将被放置在一个名为'lid'的列中 – RiggsFolly

+0

就像@RiggsFolly所说的那样,值'{02.0,2.10,2.30}'显然不存在于你的'Details'表中。 – winter

回答

0

外键意味着Patiens每一行应该在其列lid的值匹配列Details中可用的值;最有可能的是,Details中没有行lid的值为{02.0 , 2.10 ,2.30}

使用该结构,您应该为每个lid值插入一行,但这会导致其他问题(可能重复patientId键)。

这会在您的表格设计中显示一些问题:您所描述的内容看起来像many-to-many关系,这需要对三个表格进行建模。

结构你需要的是

​​

这样你可以有一个单列为每一个病人,一个单独的行,每一个细节,并通过结合病人和细节的所有组合的表关联这两个实体的ID。

你写的查询将被分成

INSERT INTO `Patients` 
    (`patientId`, `name`, `address`, `etage`, `Door`, `Elevator`, `key_number`, 
    `medicineId`, `doctorId`) 
VALUES (109, 'Muller', 'bla bla bla ', 3, 'links', 1 , 'S12' ,'m9' , 'D11'); 

INSERT INTO `PatientsDetail` (`patientId`, `lid`) 
VALUES 
    (109, 02.0), 
    (109, 2.10), 
    (109, 2.30); 
+0

我认为这是最好的解决方案,我会尝试这个。 – SwiftUser