我有以下表格(仅列出必需的属性)
样本数据
药物
通用的
med_gen
我想要所有等同于给定药物的药物。这些药物具有相同的通用性和相同的效力,彼此等效。在上面的示例数据中,所有三个具有相同的泛型,但是只有1和三个对相应的泛型也具有相同的效力。所以1和3是等效的药物。
我想找出具有药物编号的同等药物。
注意:一种药物可能具有多种仿制药。Medicine表大约有102000条记录,generic表大约有2200条记录,potency表大约有200000条记录。因此,性能是关键。
注意2:MySQL中使用的数据库。
在MySQL中做到这一点的一种方法是利用GROUP_CONCAT()函数
GROUP_CONCAT()
SELECT g.med_id FROM ( SELECT med_id, GROUP_CONCAT(gen_id ORDER BY gen_id) gen_id, GROUP_CONCAT(potency ORDER BY potency) potency FROM med_gen WHERE med_id = 1 -- here 1 is med_id for which you're trying to find analogs ) o JOIN ( SELECT med_id, GROUP_CONCAT(gen_id ORDER BY gen_id) gen_id, GROUP_CONCAT(potency ORDER BY potency) potency FROM med_gen WHERE med_id <> 1 -- here 1 is med_id for which you're trying to find analogs GROUP BY med_id ) g ON o.gen_id = g.gen_id AND o.potency = g.potency
输出:
| MED_ID | | -------- | | 3 |
这是 SQLFiddle 演示