2010-09-06 79 views
4

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

回答

1

在我看來就像你是加盟了錯誤的領域,關係看起來像他們將是如下:

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 
0

通過這個替換您的查詢:

 
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 

它應該工作, 祝你好運