2010-05-16 4 views
0

У меня есть курс для стола, и каждый курс имеет много ресурсов.Автоинкремент на основе ряда других колонок

Course 
========== 
course_id 

Resource 
========== 
course_id 
number 

Я хочу что-то вроде отдельного автоинкремента для каждого курса_ид. Или, другими словами, я хочу автоматически перечислить ресурсы для данного курса. Например, таблица ресурсов может выглядеть примерно так:

course_id | number 
================== 
1   | 1 
1   | 2 
2   | 1 
1   | 3 
1   | 4 
2   | 2 
2   | 3 

и так далее. Я хочу сделать это в SQL, используя IBM DB2.

ответ

0

Вы должны позволить Resource забрать свои собственные идентификаторы ...

resource_id | course_id 
======================= 
1   | 1 
2   | 1 
3   | 2 
4   | 1 
5   | 1 
6   | 2 
7   | 2 

... и обнаружить ранг с помощью запросов:

SELECT course_id, 
     (SELECT COUNT(*) 
      FROM Resource 
     WHERE resource_id < r.resource_id 
     ) + 1 AS rank 
    FROM Resource r 

Это, несомненно, больше работы для оптимизатора, но будет упростить жизнь в любом другом отношении (например, обрабатывать удаления).

+0

Чтобы облегчить чтение таблицы, как насчет триггера вставки, который задает значение course_id на основе 'select max (number) +1 из Resource where course_id = ' Я не уверен, если вы может выполнять эту операцию, если у вас есть ключ через Course_id и номер, но вы всегда можете пойти с resource_id тоже. –

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