Query

如何在沒有 PRIMARY KEY 的情況下“加入”兩個表

  • November 1, 2018

我有兩個表,其中沒有主鍵和外鍵。

  • 表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

引用自:https://dba.stackexchange.com/questions/192585