我有两个定义的表:
表1:患者
| patient_id | patient_name | medications |
------------------------------------------------------
| 1 | Jon Doe | 1 |
| 2 | Jane Doe | 2,3 |
表2:药物治疗
| medication_id | medication_name |
--------------------------------------
| 1 | Med 1 |
| 2 | Med 2 |
| 3 | Med 3 |
我使用以下sql创建了架构和数据:
create table patient (patient_id INT, patient_name TEXT, medications TEXT);
create table medication (medication_id INT, medication_name TEXT);
INSERT INTO patient VALUES (1, 'Jon Doe', '1');
INSERT INTO patient VALUES (2, 'Jane Doe', '2,3');
INSERT INTO medication VALUES (1, 'Med 1');
INSERT INTO medication VALUES (2, 'Med 2');
INSERT INTO medication VALUES (3, 'Med 3');
我正在尝试编写一个查询,列出患者的一个列是逗号分隔的药物列表。我尝试过以下查询:
SELECT
patient_id,
patient_name,
medications,
(SELECT group_concat(medication_name) FROM medication T2 WHERE T2.medication_id in (T1.medications)) as med_names
FROM
patient T1
问题在于,对于第二名患者(Jane Doe),我只得到第一种药物。结果:
| patient_id | patient_name | medications | med_names |
------------------------------------------------------------------------
| 1 | Jon Doe | 1 | Med 1 |
| 2 | Jane Doe | 2,3 | Med 2 |
期望的结果是:
| patient_id | patient_name | medications | med_names |
--------------------------------------------------------------------------
| 1 | Jon Doe | 1 | Med 1 |
| 2 | Jane Doe | 2,3 | Med 2, Med 3 |
这可能吗?任何帮助,将不胜感激。感谢。
答案 0 :(得分:2)
您已将多个值作为字符串放入meds字段中。当该字符串值(2,3
)与实际med表中的整数ID进行比较时,该字符串将转换为int。这意味着
JOIN ... ON '2,3' = x
将被解析/执行为
JOIN ... ON 2 = x
这是一个糟糕的桌面设计。切勿将多个值放入单个字段中。您应该有一个标准化设计,这意味着添加patients_meds
表,您将拥有patientID, medID
个记录。