gpt4 book ai didi

MySQL 没有结果,因为外键是 NULL

转载 作者:行者123 更新时间:2023-11-29 02:39:54 25 4
gpt4 key购买 nike

我想为一个主题分配一到三个人。然后我想检索特定主题的作业。

我有一个 SUBJECTS 表,其中有十几个主题(列:id(PK),名称)。我有一个 USERS 表,其中有十几个用户(列:id(PK)、firstName、lastName 等)

然后我创建了一个表 AS_SUBJECTS,其中有以下列(所有这些都是整数):

id(PK), subjectName, user1, user2, user3  

关系:

  • subjectName 是 subjects.id 的 FK
  • user1 是 users.id 的 FK
  • user2 是 users.id 的 FK
  • user3 是 users.id 的 FK

我希望 user2 和 user3 是可选的,即一个主题可以分配一两个或三个人。因此,我在这些列上允许了 NULL。

现在假设我在 AS_SUBJECTS 中输入这些值:

id = 1
subjectName = 1
user1 = 7
user2 = NULL
user3 = NULL

如果我查询:SELECT * FROM as_subjects WHERE as_subjects.subjectName = 1;我得到了所有列的结果,包括具有 NULL 值的列。

问题:我需要在 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 的列的帖子。我需要的是选择列 NO MATTER IF value is NULL。

最佳答案

只需将 users 上的 [INNER] JOIN 更改为 LEFT JOIN

...
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
...

参见 this SO post有关各种连接类型的详细讨论。

关于MySQL 没有结果,因为外键是 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54856380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com