当前位置: 首页 > 面试题库 >

SQL查询在多对多关系中的精确匹配

杨甫
2023-03-14
问题内容

我有以下表格(仅列出必需的属性)

  1. 药品(身份证,姓名),
  2. 通用(ID,名称),
  3. med_gen(med_id引用医学(id),gen_id引用一般(id),效力)

样本数据

药物

  1. (1,“ Crocin”)
  2. (2,“ Stamlo”)
  3. (3,’NT Kuf’)

通用的

  1. (1,“六氯丁啶”)
  2. (2,’苯甲酸甲酯’)

med_gen

  1. (1,1,‘100mg’)
  2. (1、2,“ 50毫升”)
  3. (2,1,‘100mg’)
  4. (2,2,‘60ml’)
  5. (3,1,‘100mg’)
  6. (3,2,‘50毫升’)

我想要所有等同于给定药物的药物。这些药物具有相同的通用性和相同的效力,彼此等效。在上面的示例数据中,所有三个具有相同的泛型,但是只有1和三个对相应的泛型也具有相同的效力。所以1和3是等效的药物。

我想找出具有药物编号的同等药物。

注意:一种药物可能具有多种仿制药。Medicine表大约有102000条记录,generic表大约有2200条记录,potency表大约有200000条记录。因此,性能是关键。

注意2:MySQL中使用的数据库。


问题答案:

在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 演示



 类似资料:
  • 问题内容: 假设我有以下三个表来表达一个关系,在这些关系中,帖子被赋予了标签(多对多关系): 现在,假设我想查找所有带有标签{clever,interesting}且没有其他标签的帖子。 这是我失败的尝试。它查找带有标签{clever,interesting}的帖子,但也查找具有标签{clever,interesting,annoying}或{clever,interesting,unthical

  • 实现了一对多的关系,它运行良好。 我的问题是当我运行下面的查询时,如果表有100个员工行,每个员工有两个部门。数据库查询被调用了101次,因为对每个员工都是调用部门查询,要完成调用全部100行需要很长时间,有没有人可以提出替代的解决方案? 输出XML:

  • 我在Eclipselink2.3.2中使用JPA2.0,在其中,我在产品和它们的颜色之间建立了多对多的关系。一个产品可以有多种颜色,一种颜色可以与多种产品相关联。这种关系在数据库中由三个表表示。 null 很明显,实体类有一组颜色-,它被命名为。 实体类有一组产品-,它被命名为。 我需要根据提供的与表中的颜色不匹配的从表中获取颜色列表。 对应的JPQL如下所示。 它生成以下SQL语句。 因为这将是

  • 问题内容: 我有两个表A和Band,A与B之间的关系是A —>一对多—> B 通常,对于A的每条记录,我都有一个B的记录。 我正在尝试编写一个查询,该查询将为我提供A的 唯一 记录列表,其中B中的 记录 超过 一个(多个) 。 我很困惑,因为我只完成了基本的sql查询,而这对我来说似乎很复杂。 可以请一个人指导我正确答案或给我解决方案。 编辑: 好吧,我尝试了下面的事情,它给了我一个错误 从A a

  • 本文向大家介绍MyBatis中多对多关系的映射和查询,包括了MyBatis中多对多关系的映射和查询的使用技巧和注意事项,需要的朋友参考一下 先说一下需求:  在页面上显示数据库中的所有图书,显示图书的同时,显示出该图书所属的类别(这里一本书可能同时属于多个类别) 创建表:  笔者这里使用中间表连接图书表和图书类别表,图书表中没有使用外键关联图书类别表  而是在中间表中引用了图书主键和类别主键  通

  • 我试图让api返回一个注释列表,通过与标签的多对多关系关联,给定一个标签ID。Spring boot自动创建了一个名为notes_tables的桥接表,其中包含一个notes_id字段和一个labels_id字段。Spring Boot还创建了一个notes表和一个labels表。我尝试了以下步骤: 我只需要让它工作,但我特别好奇我是否能让它与jpa方法查询一起工作。任何查询都可以,只要它可以工作