我有以下表格(仅列出所需的属性)
样本数据
药
通用
med_gen
我想要所有相当于给定药物的药物。这些药物彼此相同,具有相同的通用性和相同的效力。在上面的样本数据中,所有三个都具有相同的泛型,但只有1和3对相应的泛型具有相同的效力。所以1和3是同等药物。
我想找出同样的药物给药。
注意:一种药可能含有任何数量的仿制药。 Medicine表有大约102000条记录,通用表大约2200条,效力表大约有200000条记录。所以表现是关键点。
注2:MySQL中使用的数据库。
答案 0 :(得分:1)
在MySQL中实现它的一种方法是利用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 演示