2014-02-25 2 views
1

Я пытаюсь написать SQL-запрос, который возвращает список номеров модулей и их заголовков для университетского курса, а также список предпосылок для этого модуля и их названий. Это означает, что результат должен выглядеть что-то похожее на:Исправить атрибут на основе FK

Module | Module Title | Prerequisite | Prerequisite Title 
C1930 | Computing | C1100  | Basic Computing 
C1930 | Computing | C1500  | Intermediate Computing 
T1350 | Textiles  | T1100  | Sewing 

Типы таблиц являются следующим:

модуля (moduleNumber, MODULENAME);

Необходимое условие (moduleNumber, prerequisiteNumber);

Моя проблема заключается в разрешении prequisteNumber как moduleName. Я вижу, что, вероятно, это будет либо подзапрос, либо использование JOIN какого-то типа (INNER JOIN - это то, как я его пытался), но я не могу заставить его работать.

Мои попытки запроса следующим образом:

SELECT m.moduleNumber as "Module", m.moduleName as "Module Title", p.moduleNumber as "Prerequisite", p.prerequisiteNumber as "Prerequisite Title" 
FROM Module m, Prerequisite p 
WHERE p.moduleNumber = m.moduleNumber 
OR p.prerequisiteNumber = m.moduleNumber 

и:

SELECT m.moduleNumber as "Module", m.moduleName as "Module Title", p.moduleNumber as "Prerequisite" 
FROM Module m 
INNER JOIN Prerequisite s 
ON m.moduleNumber = p.moduleNumber 
INNER JOIN 
(
    SELECT m.moduleName as "Prerequisite Title" 
    FROM Module m, Prerequisite p 
    WHERE m.moduleNumber = p.moduleNumber 
) 

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

Спасибо за ваше время.

EDIT:

Вот пример данных для модуля и Предпосылка таблицы:

Модуль

moduleNumber | moduleName 
C1930  | Computing 
C1100  | Basic Computing 
C1500  | Intermediate Computing 
T1350  | Textiles 
T1100  | Sewing 

Предпосылкой

moduleNumber | prerequisiteNumber 
C1930  | C1100 
C1930  | C1500 
T1350  | T1100 

ответ

1

Если предварительные условия в модуле тогда возможно, что Вы ищете:

SELECT m.moduleNumber as "Module", 
     m.moduleName as "Module Title", 
     p.moduleNumber as "Prerequisite", 
     p.moduleName as "Prerequisite Title" 
FROM Module m, Module p, Prerequisite mp 
WHERE m.moduleNumber = pm.moduleNumber and p.moduleNumber = pm.prerequisiteNumber 

с использованием старого SQL или:

SELECT m.moduleNumber as "Module", 
     m.moduleName as "Module Title", 
     p.moduleNumber as "Prerequisite", 
     p.moduleName as "Prerequisite Title" 
FROM Module m JOIN 
    Prerequisite mp ON m.moduleNumber = mp.moduleNumber JOIN 
    Module p ON p.moduleNumber = mp.prerequisiteNumber 

с использованием ANSI SQL.

+0

Хм. Я вижу, где вы собираетесь с этим, но он выводит один и тот же набор данных дважды - я добавлю примерные данные в исходное сообщение с примерами. – Paul

+0

Были сделаны изменения - я думаю, это должно сделать ситуацию более ясной - извините за недоразумение. – Paul

+0

Это набор данных, которые я принимал. Я не вижу, как это дает дубликаты. Я рассмотрю. – albe

Смежные вопросы