2015-12-15 3 views
1

У меня есть базовое понимание sql и вы создали небольшую базу данных, которая должна быть отправлена ​​через 24 часа. Я сделал схему в sqlfiddle здесь http://www.sqlfiddle.com/#!9/28fcdSQL SELECT query over 2 tables

Мне нужно выполнить запрос, который будет искать сотрудник (от появления таблицы или обучения) и вернуть 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, я использую немного как: ВЫБРАТЬ 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. Предполагается, что это означает, что курсор и o встречаются, а * - подстановочный знак. Я не хочу возвращать шаблон, или я не думаю, что делаю. –

+0

хорошо, что работает, но я не менее смущен. Если бы я мог беспокоить вас немного дальше, не могли бы вы рассказать мне об этом, потому что мне нужно понять и учиться на нем. –

+0

курс c, появление o - делает c и o локальные псевдонимы для курса и возникновения соответственно. В Sql select * означает выбор всех полей и выбор c. * Здесь означает выбор всех полей из c (курсы). –

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

Thankyou. Я думаю, что это было полезно. Скотт –