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

查询与学生20性别及居住地相同的学生数量的MySQL语句问题

解决查询同性别同城镇学生数量的问题

嘿,我来帮你搞定这个MySQL查询的问题!先拆解你遇到的问题,再一步步修正你的代码。

原查询的语法问题

你的查询语句有几个明显的语法错误:

  • MySQL的语法顺序是SELECT ... FROM ... JOIN ... ON ... WHERE ...,你把WHERE放在了JOIN前面,这会直接导致语法报错。
  • 这里不需要用WHEN关键字,过滤条件应该用WHERE。
  • 你提到的matches表完全没必要,我们可以通过自连接student表本身来实现需求,不需要额外的表。

正确的查询语句

要查询与学生nr=20性别相同且居住在同一城镇的学生数量,我们可以自连接student表,把其中一个实例作为基准学生(nr=20),另一个实例用来匹配符合条件的其他学生:

-- 先确认学生20的基础信息(可选,用来验证数据是否存在)
SELECT sex, town FROM student WHERE nr = 20;

-- 查询符合条件的学生数量(排除学生20自己)
SELECT COUNT(*) AS matching_students_count
FROM student s1
INNER JOIN student s2 ON s1.sex = s2.sex AND s1.town = s2.town
WHERE s1.nr = 20 AND s2.nr != 20;

代码解释:

  • 给student表起两个别名s1和s2:s1代表基准学生(nr=20),s2代表要匹配的其他学生。
  • INNER JOIN的条件是两者性别和城镇完全一致。
  • WHERE子句锁定基准学生为nr=20,同时排除他自己(避免把他算进统计数量里)。
  • 如果需要查看具体的学生信息,把COUNT(*)换成s2.nr, s2.sname, s2.ssurname即可。

关于无数据返回的问题

如果执行后没有结果,可能是这几个原因:

  • 学生表中根本没有nr=20的学生,先执行SELECT * FROM student WHERE nr=20确认是否存在。
  • 没有其他学生和nr=20的学生性别相同且住在同一城镇。
  • 城镇字段的字符串可能有大小写或空格差异,比如"London"和"london"会被视为不同值,可以用LOWER(s1.town) = LOWER(s2.town)来忽略大小写。

你的建表代码整理(优化版)

这里把你的建表代码整理成更规范的格式,还加了一些实用的约束建议:

CREATE TABLE student (
    nr INTEGER PRIMARY KEY,
    town TEXT,
    birthdate INTEGER,
    sex INTEGER,
    sname TEXT,
    ssurname TEXT
);

CREATE TABLE lecturer (
    lnr INTEGER PRIMARY KEY,
    lname TEXT,
    lsurname TEXT
);

CREATE TABLE course (
    cnr INTEGER PRIMARY KEY,
    cname TEXT,
    lnr INTEGER,
    FOREIGN KEY fk_clnr (lnr) REFERENCES lecturer (lnr)
);

CREATE TABLE enrolledin (
    nr INTEGER,
    cnr INTEGER,
    FOREIGN KEY fk_nr (nr) REFERENCES student (nr),
    FOREIGN KEY fk_cnr (cnr) REFERENCES course (cnr),
    PRIMARY KEY (nr, cnr) -- 添加联合主键,避免重复选课记录
);

CREATE TABLE exam (
    lnr INTEGER,
    cnr INTEGER,
    nr INTEGER,
    note TEXT,
    FOREIGN KEY fk_enr (nr) REFERENCES student (nr),
    FOREIGN KEY fk_ecnr (cnr) REFERENCES course (cnr),
    FOREIGN KEY fk_elnr (lnr) REFERENCES lecturer (lnr),
    PRIMARY KEY (lnr, cnr, nr) -- 添加联合主键,避免重复考试记录
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:32:49