MySql匹配id使用来自不同行

时间:2018-05-18 16:37:11

标签: mysql

本学期我正在学习数据库管理课程,我正在研究我们得到的一个已分配的问题。我们应该创建一个数据库并为所描述的操作提供mysql语句。

发布我的行为如下所示:

获得与同一性别相同并与20岁学生住在同一个城镇的学生人数。

我尝试使用内部联接,但是我遇到了让我困惑的错误。我也试过匹配,但由于没有说明数据,这也没有用。
这是我的代码。

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) );

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) );

select nr, sex, town 
FROM student 
WHERE student AS S INNER JOIN matches M ON 
    S.sex = M.sex AND S.town = M.town WHEN nr = 20; 

1 个答案:

答案 0 :(得分:0)

  

获得与同一性别相同并与20岁学生住在同一个城镇的学生人数

您应该通过子选择解决此问题。我不明白为什么你使用连接。所有信息均由学生提供。

让我们开始吧:

首先你需要20岁的学生做爱:

SELECT sex FROM student WHERE nr = 20;

你需要20岁以下的学生小镇:

SELECT town FROM student WHERE nr = 20;

现在你需要学生数:

SELECT COUNT(*) FROM student;

至少你把所有东西放在一起:

SELECT COUNT(*) FROM student
WHERE sex = (
    SELECT sex FROM student WHERE nr = 20
)
AND town LIKE (
    SELECT town FROM student WHERE nr = 20
);