MySQL没有结果,因为外键为空
我想给一个科目分配一到三个人。然后我想检索特定主题的作业 我有一个表主题,其中有十几个主题(列:id(PK),name)。 我有一个表USERS,其中有十几个用户(列:id(PK)、firstName、lastName等) 然后,我创建了一个表作为_主题,其中有以下列(所有列都是整数): 关系:MySQL没有结果,因为外键为空,mysql,sql,Mysql,Sql,我想给一个科目分配一到三个人。然后我想检索特定主题的作业 我有一个表主题,其中有十几个主题(列:id(PK),name)。 我有一个表USERS,其中有十几个用户(列:id(PK)、firstName、lastName等) 然后,我创建了一个表作为_主题,其中有以下列(所有列都是整数): 关系: subjectName是FK to subjects.id user1对users.id是FK user2对users.id是FK user3是对users.id的FK 我希望user2和user3
- subjectName是FK to subjects.id
- user1对users.id是FK
- user2对users.id是FK
- user3是对users.id的FK
id = 1
subjectName = 1
user1 = 7
user2 = NULL
user3 = NULL
如果我查询:SELECT*FROM as_subjects,其中as_subjects.subjectName=1代码>
我得到所有列的结果,包括那些具有空值的列
问题:我需要在AS_SUBJECTS中查询一个主题,并为分配给该主题的每个用户检索users.firstName和users.lastName。所以我使用别名:
SELECT
as_subjects.subjectName
as_subjects.user1
u1.firstName as user1FirstName
u1.lastName as user1LastName
as_subjects.user2
u2.firstName as user2FirstName
u2.lastName as user2LastName
as_subjects.user3
u3.firstName as user3FirstName
u3.lastName as user3LastName
FROM as_subjects
JOIN subjects ON as_subjects.subjectName = subjects.id
JOIN users u1 ON as_subjects.user1 = users.id
JOIN users u2 ON as_subjects.user2 = users.id
JOIN users u3 ON as_subjects.user3 = users.id
WHERE as_subjects.subjectName = 1;
该查询是有效的,但当as_subjects.user2或3为NULL时,该集为空,没有任何数据
关于如何实现这一点,有什么意见吗?我所能找到的只是关于如何选择值为NULL的列的帖子。我需要的是选择列,不管值是否为NULL 看看不同类型的连接-例如,您可能正在寻找左外连接。(即在示例中,当您希望保留“右侧”的表与“左侧”的表不匹配的行时,将JOIN替换为LEFT OUTER JOIN)
只需将用户
上的[内部]连接
s更改为左连接
s即可
...
FROM as_subjects
JOIN subjects ON as_subjects.subjectName = subjects.id
LEFT JOIN users u1 ON as_subjects.user1 = users.id
LEFT JOIN users u2 ON as_subjects.user2 = users.id
LEFT JOIN users u3 ON as_subjects.user3 = users.id
...
有关各种连接类型的详细讨论,请参阅。编辑了我的打字感谢必须将用户上的连接更改为左连接
谢谢我刚刚尝试了它,效果很好。我将阅读连接类型,以便更好地理解如何使用这些类型。
...
FROM as_subjects
JOIN subjects ON as_subjects.subjectName = subjects.id
LEFT JOIN users u1 ON as_subjects.user1 = users.id
LEFT JOIN users u2 ON as_subjects.user2 = users.id
LEFT JOIN users u3 ON as_subjects.user3 = users.id
...