我正在使用phpMyAdmin
来提供数据,但我遇到了问题。我对数据规范化的经验不多。但我正在尝试一些东西。
我的数据库中有一些表,如下所示:
-- Table name `Universities`
SrNo || University
----- ----------
1 Harvard
2 Boston
3 Oxford
4 Stanford
5 Dublin
我创建了上表:
CREATE TABLE Universities (
SrNo INT PRIMARY KEY AUTO_INCREMENT,
University LONGTEXT NOT NULL
);
现在我有另一张桌子:
--Table name `Courses`
SrNo || Course
---- ------
1 Maths
2 Physics
3 Computer Science
4 Electronics
5 Chemistry
我创建了上表:
CREATE TABLE Courses (
SrNo INT PRIMARY KEY AUTO_INCREMENT,
Course LONGTEXT
);
现在的问题是,一所大学提供n
个课程,其中n
每个大学可能相同或不同。每门课程由m
多所大学提供,其中m
每个科目可能相同或不同。
例如:
Harvard --> Maths, Electronics, Physics (3 subjects)
Boston --> Maths, Computer Science (2 subjects)
Stanford -> Chemistry, Electronics, Computer Science (3 subjects)
Oxford --> Physics, Chemistry, Maths, Computer Science (4 subjects)
Dublin --> (0 subjects)
由于无法触发JOIN查询(根据我的知识LIMIT)提取大学名称及其提供的课程,因此根据我的老师建议(或者可能是一个提示),我所做的是我创建了另一个表,用于存储Universities.SrNo
和Courses.SrNo
的引用。
SrNo || UnivID || CourseID
---- ------ --------
1 1 1 -- This means Harvard(SrNo=1 in table `Universities`) offers Maths(SrNo=1 in table `Courses`)
1 1 4
1 1 2
1 2 1
1 2 3
1 4 5
1 4 4
1 4 3
1 3 2
1 3 4
1 3 1
1 3 3
1 5 null
我创建了上表:
CREATE TABLE Reference (
SrNo INT PRIMARY KEY AUTO_INCREMENT,
UnivID INT NOT NULL,
CourseID INT, -- m not giving this a not null constraint coz a university may offer none of the course mentioned in the table `Courses`
);
借助于此,我试图提取他们提供的大学名称和课程名称。
如果我要列出Harvard
提供的所有课程,就像我做的那样:
SELECT Universities.University, Courses.Course FROM Universities, Courses, Reference
WHERE Universities.University="Harvard" AND Reference.UnivID = Universities.SrNo
但是我得到了0行。
我该怎么办?
1> 有没有办法在没有名为Reference
的表格的情况下获得此结果:
Harvard Maths
Harvard Electronics
Harvard Physics
2> 如果是,那怎么样?如果不是,我应该如何构建我的SQL查询以在 1 中获得上述结果?
答案 0 :(得分:1)
您可以通过嵌套查询解决此问题:
Select U.University,C.Course from Universities U, Course C where C.SrNo in (
Select R.CourseID from Reference R where UnivId in (select U1.SrNo from Universities U1 where U1.University ="Stanford" ))