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
我需要的结果:
- 显示与 User
相关联的 Cert 的 expiry
- 包含所有证书类型,即使一个不与用户
相关联
- 不显示非 活跃 [=64 的 User 的 expiry =]
我希望检索到的 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 join
和 case
表达式应该可以完成工作:
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;
我有以下 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
我需要的结果:
- 显示与 User 相关联的 Cert 的 expiry
- 包含所有证书类型,即使一个不与用户 相关联
- 不显示非 活跃 [=64 的 User 的 expiry =]
我希望检索到的 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 join
和 case
表达式应该可以完成工作:
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;