SQL 加入 - WHERE 隐藏我需要显示的结果

SQL Join - WHERE hiding results I need to show

我有以下 tables:

用户

id | full_name | active
1  | joe       | 1
2  | dave      | 0

Cert_Type

id | cert_name
1  | Cert 1
2  | Cert 2
3  | Cert 3

证书

id | user_id | cert_type_id | expires
1  | 1       | 1            | 2022-10-24
2  | 2       | 2            | 2021-01-10

我的SQL查询:

SELECT u.full_name, ct.cert_name, c.expires 
FROM User u
LEFT JOIN Cert 
  ON u.id = c.user_id 
FULL JOIN Cert_Type 
  ON c.cert_type_id = ct.id
WHERE u.active = 1

我需要的结果:

  1. 显示与 User
  2. 相关联的 Certexpiry
  3. 包含所有证书类型,即使一个不与用户
  4. 相关联
  5. 不显示非 活跃 [=64 的 Userexpiry =]

我希望检索到的 table 看起来像:

full_name | cert_name | expires
joe       | Cert 1    | 2022-10-24
NULL      | Cert 2    | NULL
NULL      | Cert 3    | NULL

实际检索到的内容:

full_name | cert_name | expires
joe       | Cert 1    | 2022-10-24
NULL      | Cert 3    | NULL

我认为 User 'dave' 不是 active 它排除了 'Cert 2'.

我不确定是否需要两个单独的 SELECT 并合并结果?

如有任何帮助,我们将不胜感激。

提前致谢。

一些 outer joincase 表达式应该可以完成工作:

select case when "User".active = 1 then full_name end as full_name,
cert_name,
 case when "User".active = 1 then expires end as expires
from "User" full join Cert
on "User".id = Cert.user_id
full join Cert_type
on Cert.cert_type_id = Cert_type.id;

Fiddle