MySQL group_concat with' in'声明

时间:2015-01-14 16:29:23

标签: mysql group-concat nested-query

我有两个定义的表:

表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  |

这可能吗?任何帮助,将不胜感激。感谢。

1 个答案:

答案 0 :(得分:2)

您已将多个值作为字符串放入meds字段中。当该字符串值(2,3)与实际med表中的整数ID进行比较时,该字符串将转换为int。这意味着

JOIN ... ON '2,3' = x

将被解析/执行为

JOIN ... ON 2 = x

这是一个糟糕的桌面设计。切勿将多个值放入单个字段中。您应该有一个标准化设计,这意味着添加patients_meds表,您将拥有patientID, medID个记录。

做一些阅读:http://en.wikipedia.org/wiki/Database_normalization