可以說我有一個名爲Document的數據庫表,其中包含我擁有的所有文檔的行。我有另一個名爲Shared的db表,它擁有指定的user_id有權訪問的文檔記錄(由其他人擁有)。因此,如果我是ex用戶1,我將使用我的user_id和user2的document_ids存儲在Shared表中的我的文檔位於Documents表和我有權訪問的user2文檔中。結合選擇取決於哪個表結果來自
Document
id
user_id
type
name
permissions
Shared
id
document_id
used_id
permissions
Documents表中的每個條目都具有permissions =「all」。共享表中的每個條目都具有諸如{寫入,讀取,刪除}等許可級別的權限。在我的查詢中找回用戶foo擁有/可訪問的所有文檔,我想根據記錄是來自Documents還是共享來取回適當的權限。現在我有一個基本查詢,可以取回所有我擁有和可以訪問的文檔。我的嘗試是這樣的:
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)**文本**,請[無屏幕截圖](http://meta.stackoverflow.com/questions/285551/why-may-i -not-upload-images-code-on-so-when-asked-question-285557#285557) –