Query
如何在沒有 PRIMARY KEY 的情況下“加入”兩個表
我有兩個表,其中沒有主鍵和外鍵。
- 表1(人員):姓名、地區、部門
- 表2(訪問):名稱,access_level
我該如何回答以下問題:
每個部門有多少人可以訪問數據?
如果我們假設這些表實際上是用來確定誰有權訪問,那麼來自 blobbles 答案的查詢就是答案,即使在
Persons
.如果 中有 4 個“John Smith”
Persons
,並且Access
表明“John Smith”具有數據訪問權限,則每個“John Smith”都將具有數據訪問權限。如果這僅僅是授予訪問權限的記錄(而不是定義授予訪問權限的內容),並且
Persons
.name
不是唯一的,那麼您無法確定。可能有兩個“John Smith”被授予訪問權限,可能只有 1 個,也可能沒有。記錄是不完整的,因為我們不知道訪問權如何Persons
與同名的不同人聯繫起來。
首先檢查人員姓名的獨特性,例如:
SELECT name, COUNT(*) FROM Persons GROUP BY name HAVING COUNT(*) > 1
如果這返回行,您可能必須從下一步中排除這些人。如果它不返回行,請加入“名稱”,因為它在 Persons 表中是唯一的:
SELECT p.department, COUNT(*) FROM Persons p INNER JOIN Access a ON p.name = a.name GROUP BY p.department