【发布时间】:2011-04-08 19:50:04
【问题描述】:
构建表的 SQL,
--
-- 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 ;
-- --------------------------------------------------------
我对表格背后的理论的概述是,每个等级都与一个职业相关联,一个职业可以有多个等级,从那一门课程只与一门课程相关联,但用户可能需要做一门额外的课程如果他们选择的人没有得到足够高的认可。
所以我的问题是,如果用户选择低级课程,我如何选择高级课程的课程详细信息,
例如,用户想成为一名电工,而他们在学校的成绩是 2D,这意味着他们只能学习 2 级课程,这意味着要完成该课程,他们必须完成更高级别的课程。我需要能够根据他们选择电工和 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 行数据,另一行是用户可以选择的数据行,如果他们选择了其他等级选项。
【问题讨论】:
-
一些需要回答的问题:(1)如何获取course表中与career_id为6的职业相关的所有行的列表? (2)grade_id和career_id有什么关系?你为什么要在那个领域加入这两个表? (3) 课程表与成绩表有什么关系?
-
看起来您可能是 SQL 新手?我认为您需要的是 JOIN,而不是像这样从多个表中进行选择。
标签: mysql database foreign-keys relational-database