2016-04-21 51 views
0

说我有两个表医生和患者 假定患者有两列:Id和名称 假设医生有三列:ID,NPI,patientids 每个patientids场均能有多个患者的id值。 因此,如果给予医生表的身份证,我该如何查询属于医生的患者。MySQL的:如何查询时ID在另一个表中记录的字段

我曾尝试以下SQL语句,但不返回任何东西

select p.Name from patients p 
where p.Id in (select patientIds from doctors d where [email protected]); 
+4

你可以用'FIND_IN_SET'。但是你最好将你的'doctors.patientids'列标准化。 –

+2

@PaulSpiegel说,你需要一个'doctors_patients'表,解析一个值列表是你想在RDBMS中做的最后一件事。 – Uueerdo

+0

谢谢你们两位。 @PaulSpiegel @ Uueerdo –

回答

0

使用小数据集,这是速度不够快:

SELECT p.Name 
    FROM patients p 
    JOIN doctors d ON [email protected] AND FIND_IN_SET(p.id, d.patientIds) 
; 

但实际上,作为评论者说,你需要一个连接表来调解patientsdoctors之间的关系。许多一对多的关系

+0

这不仅是关于性能。这是关于代码复杂性的。每次您想从医生患者列表中删除患者ID时,都必须解析并重建列表。更不用说如果你想从数据库中完全删除病人。但是 - 您的查询应该工作。 –

+0

@PaulSpiegel我同意代码的复杂性应该平衡性能。但我会同意,不管这个问题。单从这个问题来看,我们不知道这是写活跃还是纯报告数据库。就我们所知,数据集是静态的,OP只需要做一些报告。 (这是我的假设,因为我无法想象任何人试图使用这种结构进行主动写入。) – bishop

0

通用的答案/模板:

SELECT [fields you want] 
FROM tableA 
[INNER|LEFT] JOIN ["middle" table] AS AB ON tableA.id = AB.A_id 
[INNER|LEFT] JOIN tableB ON AB.B_id = tableB.id 
; 
相关问题