我有3张桌子。应用程序(相关字段是AppID)表包含有关可供下载的各种应用程序的信息,包含可用于各种可下载项目的信息的Packages表(相关字段是PackageID)以及App / Packages表(相关字段是AppID和PackageID)显示每个应用程序应下载哪些软件包。我需要一个查询来找出哪些包与特定应用程序无关。
我的想法是INNER JOIN应用程序到AppPackages以获取与应用程序相关的所有包的列表,然后OUTER JOIN将此结果集添加到Packages并找到所有空结果以显示哪些包不相关。< / p>
问题是我似乎无法弄清楚如何链接这些查询。子查询似乎不起作用,EXIST / NOT EXIST需要来自外部查询的信息,我无法使其工作。我假设我有一些简单的东西,但我读到的所有文献都是两张桌子,不超过两张。
这是我最好的尝试,但由于上述原因,EXISTS部分无效。
SELECT Packages.PackageID FROM Packages WHERE NOT EXISTS
(Select AppPackages.PackageID, AppPackages.AppID FROM AppPackages WHERE AppPackages.AppID = @AppID)
提前感谢您的任何帮助:)
干杯,
马特:)
答案 0 :(得分:1)
我需要一个查询来找出哪些软件包与特定应用程序无关。
SELECT
*
FROM
Packages p
WHERE
NOT EXISTS (
SELECT 1
FROM Applications a
INNER JOIN AppPackages ap ON ap.PackageId = p.PackageId
WHERE ap.AppId = <Your App ID>
)
答案 1 :(得分:0)
我会尝试这样:
SELECT Packages.PackageID FROM Packages WHERE Packages.PackageID NOT IN
(Select AppPackages.PackageID FROM AppPackages WHERE AppPackages.AppID = @AppID)