2016-04-21 89 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 
; 
相關問題