我在回答问题时遇到麻烦了。我有以下三张桌子:
documents (
id,
title
);
positions (
id,
title
);
documents_positions (
document_id,
position_id
);
我想要得到的(我要求的结果)是一个文档矩阵,以及它们所适用的位置。因此,每一行都有文档标题,然后每一个位置都有一个列,如果这些位置应用于文档,则在其旁边有一个带有True或False的列。我怀疑需要某种左联接,因为在文档后面的每一行上,我想列出positions表中的每个位置,以及文档是否应用于它。有道理?
最佳答案
您可以使用cross join
来构建矩阵,然后使用left join
来查找矩阵中填充的位置:
select d.title
, p.title
, case when dp.document_id is null then 'hrmm' else 'HALLELUJAH' end
from documents d
cross join
positions p
left join
documents_positions dp
on dp.document_id = d.id
and dp.position_id = p.id