2015-12-15 72 views
1

我對sql有一個基本的瞭解,並且已經構建了一個必須在24小時內提交的小數據庫。我曾在sqlfiddle這裏 http://www.sqlfiddle.com/#!9/28fcd對兩個表的SQL SELECT查詢

我需要運行一個查詢,將一位工作人員查詢(從表中出現或教學)的模式,並返回教導的課程module_code和MODULE_TITLE(從表課程)工作人員說。 我花了一天半的時間試圖解決這個問題(這可能使我非常朦朧),現在正急於尋求幫助。

表格模式如下。道歉,如果這不是事情的方式。

CREATE TABLE course (
module_code VARCHAR (10), 
module_title VARCHAR (40), 
PRIMARY KEY (module_code)); 

CREATE TABLE teaching (
staff VARCHAR (40), 
room VARCHAR (10), 
PRIMARY KEY (staff)); 

CREATE TABLE occurrence (
module_code VARCHAR (10), 
Instance VARCHAR (1), 
staff VARCHAR (40), 
year INT (1), 
hours INT (2), 
PRIMARY KEY (instance, module_code), 
FOREIGN KEY (staff) REFERENCES teaching (staff)); 

INSERT INTO teaching VALUES 
('Louise Ashby','C2-07a'), 
('Abdul Razak','C2-09'), 
('Brennen Tighe','C2-06'), 
('Andrew Parker','C2-04'), 
('Tim Goddard','C2-04'); 

INSERT INTO course VALUES 
('CPU4000','Core Skills'), 
('CPU4003','Introduction to Programming'), 
('CPU4005','Networking Fundamentals'); 

INSERT INTO occurrence VALUES 
('CPU4000','A','Louise Ashby',1,5), 
('CPU4000','B',NULL,1,0), 
('CPU4000','C',NULL,1,0), 
('CPU4003','A','Abdul Razak',1,6), 
('CPU4003','B','Brennen Tighe',1,6), 
('CPU4003','C','Andrew Parker',1,6), 
('CPU4005','A','Tim Goddard',1,0), 
('CPU4005','B',NULL,1,0), 
('CPU4005','C',NULL,1,0); 

我使用的SQL是有點像: SELECT MODULE_TITLE,module_code FROM當然,發生 WHERE occurrence.staff = '路易絲阿什比';

這告訴我在現場列表列 'module_code' 不明確

+0

你的SQL看起來像什麼?它產生了什麼結果?它應該產生什麼結果呢? – Rabbit

+0

我很小心地確定我在問什麼,而且我一直不清楚。內心的愚蠢接管!我實際上需要做的是搜索由特定導師教授的課程。說如果我以路易絲阿什比的名字,我想要返回她所教課程的module_title和module_code。對不起,我不明白 –

回答

0

查詢是這樣的:根據您的架構

select c.* from course c 
inner join occurrence o on o.module_code = c.module_code 
where o.staff = 'Louise Ashby' 

。但是,在現實世界的應用程序中,您不會使用這樣的模式。

+0

對不起。我完全不明白。是c。應該表示過程和出現,而*是通配符。我不希望返回通配符,或者我不認爲我這樣做。 –

+0

好,可以工作,但我不會困惑。如果我可能會更加困擾你,你能否通過它來說服我,因爲我需要了解並從中吸取教訓。 –

+0

課程c,出現o - 分別製作c和o本地別名。在Sql中select *表示選擇所有字段,並選擇c。*這裏意味着從c(courses)中選擇所有字段。 –

0
select 
    `teaching`.staff, 
    `course`.module_code, 
    `course`.module_title 
from 
    `teaching` 
inner join 
    `occurrence` on 
    `occurrence`.staff = `teaching`.staff 
inner join 
    `course` on 
    `course`.module_code = `occurrence`.module_code 
0

在將它們連接在一起時,您必須提供表格別名。 *表示「全部」。所以上面的查詢是選擇你的條件滿足的c表中的所有列。模棱兩可的錯誤可能是因爲你沒有指定加入表的鍵。希望有所幫助。

對不起,本意是回覆你的評論不添加答案。對於stackoverflow仍然是新的。

+0

謝謝。我認爲這很有幫助。斯科特 –