【发布时间】:2026-02-16 18:35:01
【问题描述】:
这张图片代表了我需要制作的数据库中的er图,但我想知道fk_note和id(note table)之间的关系heep,以及fk_users和id(users table)之间的关系是否得到每个人的id请注意,当我使用内部连接进行选择时。
【问题讨论】:
标签: mysql sql inner-join
这张图片代表了我需要制作的数据库中的er图,但我想知道fk_note和id(note table)之间的关系heep,以及fk_users和id(users table)之间的关系是否得到每个人的id请注意,当我使用内部连接进行选择时。
【问题讨论】:
标签: mysql sql inner-join
notes id 和 fk_note 之间的关系不是必需的,因为用户的外键已经将便笺标记为属于特定用户。
找到所有不属于运行的用户的简单方法
SELECT n.*,u.* FROM notes n INNER JOIN users u ON n.fk_user = u.id
【讨论】:
SELECT n.*,u.* FROM notes n INNER JOIN users u ON n.fk_user = u.id
“fk_note”和“fk_user”列都表示相同的关系。两者兼有是不必要的,并且可能导致错误。
如果每个用户只有一个笔记(或没有),那么:
在这种情况下,以下两个查询是等效的 - 都返回任何名为“Rowan”的用户的单个注释:
Select users.id, users.name, notes.id, notes.title
From users
Inner Join notes
On notes.fk_user = users.id
Where
users.name = 'Rowan'
和
Select users.id, users.name, notes.id, notes.title
From notes
Inner Join users
On users.fk_note = notes.id
Where
users.name = 'Rowan'
如果用户可能有多个笔记,那么:
在这种情况下,只有上面的第一个查询(加入notes.fk_user = users.id)是可能的。它将返回所有任何名为“Rowan”的用户的笔记。
如果用户可以有一个“主要”和多个“次要”注释,那么“fk_note”列可以代表“主要注释”,然后有两个列是有意义的(但是建议选择更好的名称)。
上面的两个查询会给出不同的结果:
notes.fk_user = users.id 将给出用户的所有辅助注释。users.fk_note = notes.id 将只给出用户的主要注释。【讨论】: