在phpMyAdmin中对数据库表触发查询的问题。结果获得0行

时间:2014-11-26 16:18:44

标签: mysql sql

我正在使用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.SrNoCourses.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 中获得上述结果?

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