哇,这个标题很糟糕。
情况就是这样......
我有三张桌子。
应用程序:第一个表是应用程序目录,这些应用程序包含应用程序ID,应用程序名称以及其他对此问题不重要的字段。
库存:第二个表是这些应用程序的部署列表。部署包含应用程序名称,应用程序ID,库存ID,部门,设施以及此问题不重要的其他字段。
FRMP:第三个表是创建库存记录时创建的表格;该表告诉我们库存记录是否包含机密信息。它包含应用程序ID,库存ID,FRMP ID以及用于确定与其关联的库存记录是否包含敏感数据的列。
关系: 应用程序可以属于许多库存记录,但库存记录只能有一个应用程序。 FRMP记录必须只有一个与之关联的库存记录,但库存记录可以在没有FRMP记录的情况下存在。
这是我正在努力做的事情,过去两天一直在努力做...
我需要一个每个应用程序的列表(按名称),对于部署它的每个记录,其中只有一个部署包含敏感数据。
例如,如果Inventory中的记录250具有应用程序名称74且FRMP.HoldsSensitive =“No”,但Inventory中的记录379具有应用程序名称74和FRMP.HoldsSensitive =“是”,我不希望看到应用程序74.
这并不像看起来那么容易。
修改
以下是一些示例数据和首选输出。
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,因为在Inventory表中不存在SugarIt。
答案 0 :(得分: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
)