【发布时间】:2015-01-08 13:29:29
【问题描述】:
我目前有 2 个表,疫苗接种和疫苗接种类型,可以使用疫苗 ID 属性连接。
vaccination 基本上是疫苗类型和患者之间的多对多连接表。它有 3 个属性:vaccine_id、registration_no 和 date。 Vaccination_type 具有疫苗 ID、疫苗名称。
我想加入这两个表并获得这些条目:
vaccine_id vaccine_name registration_no date
1 influenza 1111 2015-01-15
2 hepatitis B null null
3 polio 1111 2015-01-15
4 hepatitis A 1112 2015-01-15
这意味着即使患者没有接种乙肝疫苗,我仍然希望该条目为空。但是我只想要一个特定的registration_no,在这种情况下是1111,换句话说我也希望甲型肝炎写为null,因为它不是由1111完成的。所以如果我处理1111,我的预期结果将是:
vaccine_id vaccine_name registration_no date
1 influenza 1111 2015-01-15
2 hepatitis B null null
3 polio 1111 2015-01-15
4 hepatitis A null null
我已尝试使用所有连接,但找不到完美运行的连接。任何建议将不胜感激,谢谢!
【问题讨论】:
-
外连接可以完美运行。在可用的两种类型中,LEFT 版本比 RIGHT 更受欢迎。
-
我觉得那是
left join你累了吗? -
你所说的属性实际上在SQL世界中被称为列。它也是行,而不是条目。
-
列是字段是属性。行是一个条目是一个元组。从逻辑、物理或应用程序 POV 中查看同一事物时的不同词汇表。来到这里的人可能会从略有不同的参考点查看数据。实际上,当时对数据的描述比物理更符合逻辑,因此属性更正确……如果您真的想在这个场所以这种方式开始分析“正确性”。
-
如上所述,在问题中我看到两个实体:Patient 和 Vaccination_Type。它们彼此之间具有多对多的关系。从描述中,我假设属性 Registration_No 唯一标识患者。事实上,它被称为,而不是类似,哦,Patient_Id 表明还有另一个未披露的含义。不过,是否要求为每个患者列出每种疫苗,显示哪些已接种,哪些未接种?你想看看根本没有接种过疫苗的病人吗?如果是这样,您将需要查询中的所有三个表。
标签: mysql sql select join left-join