내가 소유하고있는 모든 문서에 대한 행을 포함하는 Document라는 db 테이블이 있다고 가정 해 보겠습니다. 나는 특정 user_id가 접근 할 수있는 (다른 사람들이 소유 한) 문서에 대한 레코드를 가진 Shared라는 또 다른 db 테이블을 가지고있다. 예를 들어 user1 인 경우, 내 user_id 및 user2의 document_ids와 공유 테이블에 저장된 액세스 권한이있는 Documents2 및 Documents2 문서에 내 문서가 있습니다.Combining 결과에 따라 테이블 선택
Document
id
user_id
type
name
permissions
Shared
id
document_id
used_id
permissions
Documents 테이블의 각 항목에는 permissions = "all"이 있습니다. 공유 테이블의 각 항목에는 {write, read, delete}와 같은 사용 권한 수준이 있습니다. 사용자의 foo가 소유하거나 액세스 할 수있는 모든 문서를 다시 가져 오는 쿼리에서 필자는 문서 또는 공유의 레코드인지에 따라 적절한 사용 권한을 얻고 싶습니다. 나는 이제 자신의 모든 문서를 가져 와서 액세스 할 수있는 기본 쿼리를 가지고 있습니다.
이Select d.id, d.user_id, d.permissions
from Document d
left join Shared s on s.document_id = d.id
where s.user_id = 1
또 다른 시도가 :
Select d.id, d.user_id,
COALESCE(s.permissions, d.permissions) as permissions
from Documents d
left join Shared s on s.document_id = d.id and s.user_id = 1;
가 ID입니다 내 시도는이 같은 것입니다 공유 테이블에 서로 게이트 키가 있습니까? – Mackers
공유 테이블의 id는 문서 또는 사용자 테이블과 아무 관련이 없습니다. 간단한 자동 증가 기본 키 –
귀하의 질문에 귀하의 질문을 추가하고 해당 데이터를 기반으로 예상되는 출력을 추가하십시오. [_Formatted_] (http://stackoverflow.com/editing-help#code) ** text ** please, [스크린 샷 없음] (http://meta.stackoverflow.com/questions/285551/why-may-i) 285557 # 285557) –