如何解决 SQL 视图中的空白点?

How can i solve blank spots in a SQL View?

在我的 sqllite 练习中,我发现了以下问题: 我基本上有三个不同的 Tables:

科目

PRIMARY KEY(ID) Subject
1 Business
2 IT
3 Sports

参与者

PRIMARY KEY(ID) Name semester
1 Meyer 6
2 Smith 4
3 Brown 4
4 White 2
5 Anthonie 2
6 Frankson 2

他们在 Table 参与者列表中被引用

SUBJECT.ID Participant.ID
1 2
1 3
1 5
2 4
2 6
3 1

现在我支持创建一个包含以下内容的视图:Participants.ID、Participants.Name 和 Subjects.Subject 所以我有一个 Table 显示 ID、名称和参与者正在访问的主题。

到目前为止我这样做了:

CREATE VIEW[OVERVIEW]AS
   SELECT Participants.ID,
          Participants.Name,
          Subjects.Subject
         from Participants
         LEFT JOIN Subjects on Participants.ID = Subjects.ID;

结果我得到这个:

Participants.ID Participant.Name Subjects.Subject
1 Meyer Business
2 Smith IT
3 Brown Sports
4 White None
5 Anthonie None
6 Frankson None

这是有道理的,因为只有三个主题,我左连接 6 Participants.ID 只有 3 Subjects.Subject

如何填写空白科目?这样 4-6 的科目也会显示吗? 我希望你能理解我的问题,我宣布它已经足够好了。

你不能加入 ParticipantsSubjects 因为它们没有直接关系,所以这个 ON 子句:

on Participants.ID = Subjects.ID

没有意义,因为参与者的 ID 与受试者的 ID 无关。

你有 table ParticipantsList 可以用作其他 2 table 之间的中间 link:

SELECT p.ID, p.Name, s.Subject
FROM Participants p
LEFT JOIN ParticipantsList pl ON pl.Participant_ID = p.ID
LEFT JOIN Subjects s ON s.ID = pl.Subject_ID;

这将 return 所有参与者,即使他们没有 link 任何主题。

如果您只想要 table ParticipantsList 中至少有 1 个主题的参与者,那么您可以使用 INNER 加入。

对于您在问题中提供的样本数据,两种情况下的结果是相同的。

参见demo