You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL主键与外键使用困惑:如何获取目标关联查询结果

关联查询获取用户及对应成绩信息

看起来你是想把users表和grades表的数据结合起来,拿到包含用户ID、用户名以及对应作业成绩的完整结果对吧?咱们利用两个表之间的外键关联(username字段),用JOIN语句就能轻松实现。

基础关联查询(仅返回有成绩的用户)

如果只需要获取那些有作业成绩的用户信息,可以用INNER JOIN,它只会返回两个表中匹配关联条件的记录:

SELECT u.id, u.username, g.assignmentName, g.mark
FROM users u
INNER JOIN grades g ON u.username = g.username;

执行这个语句后,你会得到以下结果:

idusernameassignmentNamemark
NULLaa110
NULLaa220
NULLca130

包含所有用户的查询(含无成绩的用户)

要是想展示所有用户,哪怕是没有提交作业的用户(比如你的数据里的用户b),就用LEFT JOIN,它会返回左表(users)的所有记录,右表(grades)没有匹配的字段会显示NULL:

SELECT u.id, u.username, g.assignmentName, g.mark
FROM users u
LEFT JOIN grades g ON u.username = g.username;

这个语句的结果会包含用户b:

idusernameassignmentNamemark
NULLaa110
NULLaa220
NULLbNULLNULL
NULLca130

小建议:优化users表的主键设计

另外注意到你的users表把username设为主键,而id字段允许为NULL,其实更规范的做法是用自增ID作为主键(用户名可能存在修改的需求,而自增ID是固定不变的),可以通过以下SQL调整:

-- 先移除原有的主键(username)
ALTER TABLE users DROP PRIMARY KEY;
-- 修改id字段为非空自增
ALTER TABLE users MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;
-- 设置id为主键
ALTER TABLE users ADD PRIMARY KEY (id);

调整后,记得把grades表的外键关联也改成关联users.id,这样表结构会更健壮。

内容的提问来源于stack exchange,提问作者user9314692

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:01:45