Re: MS SQL2005, хитрый (для меня) запрос
От: BilliKillers  
Дата: 22.12.05 10:03
Оценка:
Здравствуйте, newb, Вы писали:

N>Есть три таблицы:

N>1. Actions: поля: ActionID (PK), Name
N>2. Groups: поля: GroupID (PK), Name
N>3. И связка между ними: Grants: поля: ActionID (FK на PK табл. Actions), GroupID (FK на PK табл. Groups), Period.
N>ActionID + GroupID — это PK для этой таблицы.


N>Нужен запрос (желательно без подзапросов) который для заданной группы будет делать следущее:

N>Для ВСЕХ записей из Actions выводит период (из табл. Grants, если есть запись для данного ActionID и GroupID, либо NULL)

N>Например:

N>Пусть в таблицах будут следующие данные:
N>1. Actions: {'A1', 'AAA'}, {'A2', 'BBB'}, {'A3', 'CCC'}, {'A4', 'DDD'}
N>2. Groups: {'G1', 'Group1'}, {'G2', 'Group2'}, {'G3', 'Group3'}
N>3. Grants: {'A1', 'G1', 123 }, {'A2', 'G2', 345}, {'A3', 'G2', 555}, {'A4', 'G3', 234}

N>Нужно получить след. рез-т:

N>Для 'G1' (GroupID идет параметром запроса):
N>'A1', 'AAA', 123
N>'A2', 'BBB', NULL
N>'A3', 'CCC', NULL
N>'A4', 'DDD', NULL

N>для 'G2' результат такой:

N>'A1', 'AAA', NULL
N>'A2', 'BBB', 345
N>'A3', 'CCC', 555
N>'A4', 'DDD', NULL

N>для 'G2' результат такой:

N>'A1', 'AAA', NULL
N>'A2', 'BBB', NULL
N>'A3', 'CCC', NULL
N>'A4', 'DDD', 234

select Actions.*, Grants.Period
from Actions left outer join Grants on Actions.ActionID = Grants.ActionID
where Grants.GroupID = @myGroupId
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.