1

私は次のような3つのテーブルを持っています:

この1つのテーブル:m_application_resources

 resourceid resource_name   menu_group_id   menu_name   creation_date   last_created_by updation_date   last_updated_by

および2番目のテーブル:m_roles

roleid  rolename    description creation_date   last_created_by updation_date   last_updated_by

そして3番目のテーブルは:m_access_matrix

accessid    resourceid  roleid  creation_date   last_created_by updation_date   last_updated_by

テーブルの関係は次のとおりです。resourceidとroleid

そしてこれは私の質問

select  am.accessid, ar.resource_name,rls.rolename
from m_application_resources ar, m_roles rls,m_access_matrix am 
where ar.resourceid=am.resourceid 

これは次を返します:

ccessid resource_name   rolename
1   DepartmentAction    Admin
1   DepartmentAction    Client
1   DepartmentAction    Doctors
2   PositionsAction     Admin
2   PositionsAction     Client
2   PositionsAction     Doctor

結果は間違っていて、どうすればいいのかわかりません。

例:DepartmentActionは1回だけ来る必要があり、役割名は任意の1つである必要があります。

Sqlfiddleフィドル

助けてください

4

2 に答える 2

3

条件がありませんrole_id

select  am.accessid, ar.resource_name,rls.rolename
from m_application_resources ar, m_roles rls,m_access_matrix am 
where ar.resourceid=am.resourceid AND am.roleid = rls.roleid

わかりやすくするために、クエリを結合用のANSISQL構文に変換します。

SELECT am.accessid, ar.resource_name,rls.rolename
FROM m_application_resources ar
JOIN m_access_matrix am ON ar.resourceid=am.resourceid
JOIN m_roles rls ON am.roleid = rls.roleid
于 2012-11-07T18:23:29.277 に答える
2

クエリでテーブルを明示的に結合するのが最善です。私はあなたのテーブルを100%理解しているとは思いませんが、これはうまくいくはずです:

SELECT am.accessid, ar.resource_name, rls.rolename
FROM (m_application_resources ar INNER JOIN m_access_matrix am 
ON ar.resourceid = am.resourceid) INNER JOIN mroles rls ON am.roleid = rls.roleid
于 2012-11-07T18:29:49.650 に答える