2012-03-25 1 views
1

Учитывая эти две таблицыПоказаны все изменения для ключа записи из другой таблицы

subject    subject_changes 
-----------   ------------------ 
id      id 
subjectName   version   
subjectCode   subjectCode 
version    previousSubjectCode 

Как показывают все изменения в subjectCode? Я должен ссылаться на subjectCode на основе previousSubjectCode и получать соответствующие данные для этой версии.

В теме таблицы, у меня есть

1, 'Animals','Q001', 1 
2, 'Animal Kingdom', 'Q012',2 
2, 'Animal Kingdom', 'Q023',3 

и subject_changes

1, 2, 'Q012', 'Q001' 
2, 3, 'Q023', 'Q012' 

В псевдокоде

SELECT * FROM subject WHERE subjectCode= ? 

SELECT * FROM subject_changes WHERE subjectCode=? 

foreach subjectCode 
    get previousSubjectCode 
    get subjectName from subject table 

SELECT * FROM subject WHERE subjectCode = subject_changes.previousSubjectCode 

таблица результат должен выглядеть

version subjectName  subjectCode 
------- -----------  ---------- 
version 3 Animal Kingdom Q023 
version 2 Animal Kingdom Q012 
version 1 Animal   Q001 
+0

Что представляет собой 'subject_changes.id':' subject.id'? Трудно сказать из вашего примера, потому что две записи 'subject' имеют одинаковый идентификатор (т.е. 2). Это опечатка? – Leigh

ответ

0
SELECT 
    subject.version, subject.subjectName, subject.subjectCode 
FROM subject 
INNER JOIN subject_changes USING (subjectCode) 
WHERE subjectCode = ? 
+0

Спасибо, но запрос вернет все записи вместо одной записи и связанных с ней изменений. Я отредактирую вопрос, чтобы понять это, так как я понимаю, что в этом случае мне не нужно использовать таблицу версий. – user1251668

+0

Затем просто добавьте предложение WHERE. – MichaelRushton

+0

Этот запрос возвращает только тему без соответствующих изменений. Предыдущий объект SubjectCode относится к другой строке в таблице темы, которую должен вернуть запрос. – user1251668

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