如何列出多对多关系之间的所有条目并指示何时匹配
How to list all entries between many to many relationships and indicate when there is a match
我已经创建了一个数据库,我希望能够从处于多对多关系的 2 table 中检索所有条目,并指示何时存在匹配项。
您可以在附带预期结果的屏幕截图中找到带有一些虚拟数据的示例。
我看不出如何在同一 table 上独立列出所有运算符和所有标准。我用全外连接做了一些测试,但结果并不令人满意。
SELECT o.Nom,s.Nom_Standard
from Formation as f
full OUTER join Operateurs as o
on o.Id_Operateur = f.Fk_Operateur
full OUTER JOIN Standards as s
on s.Id_Standard = ps.Fk_Standard
提前致谢。
查看我对你的问题的评论,但是有一种方法可以得到你想要的:
SELECT o.Nom, s.Nom_Standard, (CASE WHEN ISNULL(f.Id_Formation) THEN 'No' ELSE 'Yes' END) AS done
FROM Operateurs o
INNER JOIN Standards s
LEFT OUTER JOIN Formation f ON f.Fk_Operateur=o.Id_Operateur AND f.Fk_Standard=s.Id_Standard
ORDER BY o.Id_Operateur
但是这不是使用中间 table 作为标准的多对多连接 table,因此可能会导致未来的混淆。
使用cross join
获取运算符和标准:
select o.Nom, s.Nom_Standard
from Operateurs o cross join
Standards s ;
如果您想从 Formation
中引入信息,请使用 left join
:
select o.Nom, s.Nom_Standard,
(case when f.IdOperateur is not null then 'Yes' else 'No' end) as is_done
from Operateurs o cross join
Standards s left join
Formation f
on o.Id_Operateur = f.Fk_Operateur
s.Id_Standard = f.Fk_Standard;
我已经创建了一个数据库,我希望能够从处于多对多关系的 2 table 中检索所有条目,并指示何时存在匹配项。
您可以在附带预期结果的屏幕截图中找到带有一些虚拟数据的示例。
我看不出如何在同一 table 上独立列出所有运算符和所有标准。我用全外连接做了一些测试,但结果并不令人满意。
SELECT o.Nom,s.Nom_Standard
from Formation as f
full OUTER join Operateurs as o
on o.Id_Operateur = f.Fk_Operateur
full OUTER JOIN Standards as s
on s.Id_Standard = ps.Fk_Standard
提前致谢。
查看我对你的问题的评论,但是有一种方法可以得到你想要的:
SELECT o.Nom, s.Nom_Standard, (CASE WHEN ISNULL(f.Id_Formation) THEN 'No' ELSE 'Yes' END) AS done
FROM Operateurs o
INNER JOIN Standards s
LEFT OUTER JOIN Formation f ON f.Fk_Operateur=o.Id_Operateur AND f.Fk_Standard=s.Id_Standard
ORDER BY o.Id_Operateur
但是这不是使用中间 table 作为标准的多对多连接 table,因此可能会导致未来的混淆。
使用cross join
获取运算符和标准:
select o.Nom, s.Nom_Standard
from Operateurs o cross join
Standards s ;
如果您想从 Formation
中引入信息,请使用 left join
:
select o.Nom, s.Nom_Standard,
(case when f.IdOperateur is not null then 'Yes' else 'No' end) as is_done
from Operateurs o cross join
Standards s left join
Formation f
on o.Id_Operateur = f.Fk_Operateur
s.Id_Standard = f.Fk_Standard;