MySQL 使用 3 个表和关系 - 如何从一侧获取所有信息并从另一侧获取名称?

问题描述 投票:0回答:1

使用:PHP 8

我有三张桌子。前两者有关系,后两者有关系。 我需要所有三个表中的数据,但第二个表中可能无法提供某些信息。另外,当在关系中找到多个匹配项时,我需要将数据与第二个表分开。这对于 sql 来说是可能的吗?或者我应该考虑多个查询并将它们与 PHP 结合起来?

我需要显示所有人员以及相关认证的到期日期。

id 姓名 DoB 需要_证书
1 第 1 个人 2000-01-01 1
2 2 人 2006-06-06 0
3 第 3 个人 1980-01-01 1

认证

person_id 认证_id 过期
1 1 2025-01-01
3 2 2066-06-06
1 2 2024-03-30

认证类型

id 认证名称
1 认证1
2 认证2

我尝试了很多连接和并集的组合,但我一辈子都无法解决这个问题。

我想要的输出是显示下表:

id 姓名 DoB 认证1 认证2
1 第 1 个人 2000-01-01 2025-01-01 2024-03-30
2 2 人 2006-06-06 n/a n/a
3 第 3 个人 1980-01-01 n/a 2066-06-06
mysql join
1个回答
0
投票

您可以使用带有多个 LEFT JOIN 子句的 SQL 查询从多个表中检索数据,即使某些信息在某些表中可能不可用。以下是实现这一目标的方法:

SELECT 
    p.id,
    p.Name,
    p.DoB,
    c1.Expiration AS `Certification 1`,
    c2.Expiration AS `Certification 2`
FROM 
    People p
LEFT JOIN 
    Certifications c1 ON p.id = c1.person_id AND c1.certification_id = 1
LEFT JOIN 
    Certifications c2 ON p.id = c2.person_id AND c2.certification_id = 2;

此查询从

People
表中选择数据,然后左连接
Certifications
表两次以检索不同认证的到期日期(
Certification 1
Certification 2
)。 LEFT JOIN 可确保包含 People 表中的所有记录,即使
Certifications
表中没有匹配的记录也是如此。 :)

© www.soinside.com 2019 - 2024. All rights reserved.