MySQL查询的帮助下,使用来自另一个表

问题描述:

THAT构建表的SQL关系ID的,MySQL查询的帮助下,使用来自另一个表

-- 
-- Table structure for table `careers` 
-- 

CREATE TABLE IF NOT EXISTS `careers` (
    `career_id` int(11) NOT NULL auto_increment, 
    `career_name` varchar(75) NOT NULL, 
    `career_desc` text NOT NULL, 
    `degree_needed` enum('Yes','No') NOT NULL, 
    `useful_info` text, 
    `useful_links` text, 
    PRIMARY KEY (`career_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `course` 
-- 

CREATE TABLE IF NOT EXISTS `course` (
    `course_id` int(11) NOT NULL auto_increment, 
    `course_type` varchar(75) NOT NULL, 
    `course_names` text NOT NULL, 
    `extra_needed` enum('Yes','No') default NULL, 
    `course_link` varchar(150) NOT NULL, 
    `grades_grade_id` int(11) NOT NULL, 
    PRIMARY KEY (`course_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=87 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `grades` 
-- 

CREATE TABLE IF NOT EXISTS `grades` (
    `grade_id` int(11) NOT NULL auto_increment, 
    `grade_desc` text NOT NULL, 
    `careers_career_id` int(11) NOT NULL, 
    PRIMARY KEY (`grade_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=87 ; 

-- -------------------------------------------------------- 

我的表背后的理论概述,从表中获取值是每个等级与职业生涯相关联,一个职业可以有很多等级,从一门课程只与一门课程相关,但如果用户选择的课程没有得到足够的认证,用户可能需要额外开设一门课程。

所以我的问题是如何选择的更高水平的课程过程中的细节,如果用户选择了一个较低的水平当然,

例如用户希望成为一名电工,他们有2个d等级这意味着他们只能参加2级课程,这意味着要完成课程,他们必须参加更高水平的课程。我需要能够显示其他课程是基于他们选择电工和二级课程的事实,值得注意的是,需要额外工作的课程有一个标记为“是”的字段“extra_needed”。

我不能活或我的工作如何得到正确的数据出来,我曾尝试以下,

SELECT * 
FROM `course` , `grades` , `careers` 
WHERE `course`.`extra_needed` IS NULL 
AND `grades`.`grade_id` = `careers`.`career_id` 
AND `careers`.`career_id` =6 

然而这带回59行数据的地方,因为它应该带回2行的数据,另一个用户可以选择的数据行,如果他们选择其他成绩选择。

+0

你需要回答的一些问题:(1)你如何获得与career_id为6的职业相关的课程表的所有行的列表? (2)grade_id与career_id有什么关系?你为什么加入这个领域的两张桌子? (3)课程表如何与成绩表相关联? – 2010-09-06 16:17:46

+0

看起来你可能是SQL新手?我认为你在这里需要的是JOIN,而不是像这样从多个表中选择。 – aceofspades 2010-09-10 22:42:01

在我看来就像你是加盟了错误的领域,关系看起来像他们将是如下:

careers.career_id = grades.careers_career_id 
grades.grade_id = course.grades_grade_id 

所以到career.career_id = 6的查询将如下所示相关的所有课程:

select course.* 

from course, 
careers, 
grades 

where course.grades_grade_id = grades.grade_id 
and grades.careers_career_id = careers.career_id 
and careers.career_id = 6 

您需要更复杂的查询做你原来问,虽然这将涉及指定不仅career_id也是一个COURSE_ID,然后有条件声明说是否需要任何进一步的课程,但我我不确定你是否拥有全部如果您需要了解他们选择的课程与所有其他相关职业相关课程之间的关系,您需要做这些工作。如果你只是希望看到所有与该职业的其他课程,那么你会添加一行:

and course.course_id <> (The course they have selected) 

如果只有过两个级别的课程,那么你可以添加一行类似下面就好像他们有选择较高的水平不能满足双方的最后陈述,这一个而如果他们选择了较低的水平都将是正确的:

and course.extra_needed IS NULL 

通过这个替换您的查询:

 
SELECT * 
FROM careers AS c 
LEFT JOIN grades AS g ON g.careers_career_id = c.career_id 
LEFT JOIN course AS crs ON crs.grades_grade_id = g.grade_id 
WHERE c.career_id =6 
AND crs.extra_needed IS NULL 

它应该工作, 祝你好运