2017-01-23 7 views
0

У меня есть БД с двумя родительскими таблицами, на которые ссылаются внешние ключи в таблице соединений, и я царапаю себе голову, пытаясь понять как я могу получить все связанные строки из одной родительской таблицы с учетом значения из другого. Например, со следующими таблицами и столбцами:SELECT получить значения из одной родительской таблицы заданные значения из другой родительской таблицы, используя таблицу соединений

schoolA_courses: 
id 
course_prefix 
course_number 

schoolB_courses: 
id 
course_prefix 
course_number 

schoolB_equivalencies: 
equivalency_id 
schoolA_id 
schoolB_id 
FOREIGN KEY (schoolA_id) REFERENCES schoolA_courses (id) 
FOREIGN KEY (schoolB_id) REFERENCES schoolB_courses (id) 

и строк, которые выглядят так:

schoolA: 
1, MATH, 101 
2, SOCI, 100 
3, HIST, 211 

schoolB: 
1, MATH, 100 
2, MATH, 110 
3, ENGL, 210 

schoolB_equivalencies: 
1, 1, 1 (school A's MATH 101 equivalent to school B's MATH 100) 
2, 1, 2 (school A's MATH 101 equivalent to school B's MATH 110) 

Пусть даны schoolA конечно префикс и номер (скажем, МАТЕМАТИКА 101) как можно Я структурирую запрос SELECT, чтобы найти все префикс/число пар курсов школы, перечисленных как эквивалентные в таблице schoolB_equivalencies? Например, с моей МАТЕМАТИКА 101 манекена конечно, как я мог бы получить

MATH 100 
MATH 110 

ответ

1

Этот запрос получает информацию о первоначальном курсе:

SELECT * 
FROM schoolA 
WHERE course_prefix = 'MATH' 
    AND course_number = 101; 

Этот запрос получает информацию о соответствующих строк в таблице соединения :

SELECT * 
FROM schoolB_ueqivalencies 
WHERE schoolA_id = (SELECT id 
        FROM schoolA 
        WHERE course_prefix = 'MATH' 
         AND course_number = 101); 

И этот запрос получает информацию о соответствующих строках в schoolB:

SELECT * 
FROM schoolB 
WHERE id IN (SELECT schoolB_id 
      FROM schoolB_ueqivalencies 
      WHERE schoolA_id = (SELECT id 
           FROM schoolA 
           WHERE course_prefix = 'MATH' 
            AND course_number = 101)); 

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

  • Нет связанных вопросов^_^