2016-07-25 51 views
0

哇,標題是一個很奇怪的標題。從1:N中選擇一個不同的值,取決於連接到N的表格,如1:1

這裏的情況...

我有三個表。

應用:第一個表是應用程序目錄,這些應用程序包含應用程序ID,應用程序名稱和其他對此問題不重要的字段。

庫存:第二張表是這些應用程序的部署列表。部署包含應用程序名稱,應用程序ID,庫存ID,部門,設施以及對此問題不重要的其他字段。

FRMP:第三個表格是創建清單記錄時創建的表格;這個表格告訴我們庫存記錄是否包含機密信息。它包含一個應用程序ID,一個庫存ID,一個FRMP ID以及一個列,用於確定與其關聯的庫存記錄是否包含敏感數據。

關係: 應用程序可以屬於許多庫存記錄,但庫存記錄只能有一個應用程序。 FRMP記錄必須只有一個與其關聯的庫存記錄,但是沒有FRMP記錄的庫存記錄可以存在。

這裏就是我想要做的,一直在努力,在過去兩天做...

我需要每一個應用程序(通過名稱)的列表,其中對每條記錄在其中部署的這些部署中沒有一個包含敏感數據。

例如,如果清單中的記錄250具有應用程序名稱74並且FRMP.HoldsSensitive =「No」,但是Inventory中的記錄379具有應用程序名稱74並且FRMP.HoldsSensitive =「Yes」,我不想參見應用74.

這並不像看起來那麼容易。

EDIT

下面是一些示例性數據和優選輸出。

AppID  AppName Vendor  
01  FooIt  Goodstuff Inc 
02  BarIt  Greatstuff Co 
03  SaltIt Sweet Inc 
04  SugarIt Sweet Inc 

InvID  AppName Division Facility 
01  FooIt  Corporate Nearville 
02  SaltIt Corporate Farville 
03  SaltIt USA  Sin City 
04  SugarIt USA  Sin City 
05  BarIt  USA  Vice City 
06  BarIt  USA  Sin City 
07  FooIt  USA  Sin City 
08  SaltIt USA  Vice City 

FRMPID INVID  APPID  HoldsSS 
01  01  01  Yes 
02  02  03  Yes 
03  03  03  No 
04  05  02  No 
05  06  02  No 
06  07  01  No 
07  08  03  Yes 

該查詢應只返回BarIt。它不應該返回SugarIt,因爲SugarIt不在Inventory表中。

+0

它看起來並不難,但你應該編輯的問題,並提供樣本數據和預期的結果。 –

+0

不幸的是我不能發佈太多的示例信息......實際的數據庫超過35k條記錄幷包含個人信息。但是,我可以提供一些示例表格輸入。當我重新開始工作時,我明天可以做到。感謝您的反饋! – bjfrees

回答

1

如果你只是想獲取應用程序的名稱,如何「回合

SELECT ApplicationName 
FROM APPLICATIONS 
WHERE NOT EXISTS 
(
SELECT * 
FROM FRMP 
WHERE FRMP.ApplicationID = APPLICATIONS.Application_ID 
AND FRMP.HoldsSensitive = 'Yes' 
) 
AND EXISTS 
(
SELECT * 
FROM INVENTORY 
WHERE INVENTORY.Application_ID = APPLICATIONS.Applications_ID 
) 
+0

我明天會看看這個結果。謝謝! – bjfrees

+0

雖然這可以在抽出所有不存在敏感信息的應用程序名稱的情況下工作,但這也可以吸引沒有任何部署的每個應用程序。 – bjfrees

+0

編輯查詢,以便僅爲已部署的應用程序提取記錄 – Rene