我在回答问题时遇到麻烦了。我有以下三张桌子:

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

10-08 14:33