如何解决 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 的科目也会显示吗?
我希望你能理解我的问题,我宣布它已经足够好了。
你不能加入 Participants
到 Subjects
因为它们没有直接关系,所以这个 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。
在我的 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 的科目也会显示吗? 我希望你能理解我的问题,我宣布它已经足够好了。
你不能加入 Participants
到 Subjects
因为它们没有直接关系,所以这个 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。