2012-03-05 1 views
0

У меня есть два запроса, которые я хотел бы объединить. Есть 4 таблицы, которые связаны. пользователь, группа, политика, источникКомбинация 2 запроса

1-й запрос Я получаю пользователей с соответствующим идентификатором политики.

первый запрос:

Select users.ID as UserID,users.Username, 
policy.ID as PolicyID,policy.PolicyName 
from users join groups on group.ID = user.groupID_FK 
join policy on users.policyID_FK = policy.ID 

второй запрос: Здесь я должен соответствовать policyID_FK и применить путь. тип источника должен быть 0, возможно, что для этой политикиID_FK нет записи типа источника данных o.

Select Path, policyID_FK from source 
WHERE SourceType = 0 and policyID_FK = 1 

Здесь вместо того, чтобы давать policyID_FK = 1, я хочу присоединиться к этому запросу с указанным выше запросом.

Пожалуйста, помогите. Я знаю, что я не очень понимаю, но, пожалуйста, спросите, не понимаете ли вы что-то.

Благодаря

ответ

2
Select users.ID as UserID,users.Username, policy.ID as PolicyID,policy.PolicyName, source.Path 
from users join groups on group.ID = user.groupID_FK 
    join policy on group.policyID_FK = policy.ID 
    left join source 
     on group.policyID_FK = source.policyID_FK 
     and SourceType = 0 

Используйте левую присоединиться, когда вы знаете, что правая таблица может не иметь соответствующие записи. Добавьте любой фильтр, который у вас есть рядом с фильтром left-join, потому что если вы поместите его туда, где он будет удалять строки, которые вы хотите получить.

+0

Пользователи не имеют политикиID_fk. он находится в таблице групп. Именно по этой причине я должен сначала присоединиться к пользователям и группе. – user175084

+0

Я только что сменил group.policyID_FK = source.policyID_FK на policy.ID = source.policyID_FK в конце. – user175084

+0

Все в порядке, я просто хочу пропустить до конца как можно раньше - так, чтобы соединения отображались как строка, a => b => c. Полагаю, это вопрос вкуса. –

1

Это то, что вы хотите?

Select users.ID as UserID, 
     users.Username, 
     policy.ID as PolicyID, 
     policy.PolicyName, 
     source.Path 
FROM users INNER JOIN groups 
      ON group.ID = user.groupID_FK 
     INNER JOIN policy 
      ON users.policyID_FK = policy.ID 
     INNER JOIN source 
      ON users.policyID_FK = source.policyID_FK 
-- You can add conditions here 
Смежные вопросы