首页 > 解决方案 > 从另一个查询中存在的查询中过滤值

问题描述

一段时间以来,我一直在尝试提出解决方案。我有一个查询,显示与包关联的产品。必须进行 3 表连接才能获得这些值,这些值可以正常工作。

我试图创建一个查询来显示包装中没有的所有可用产品。我尝试在查询中过滤掉这些值,但没有任何运气,并尝试了多种不同的方法。

这是我当前的查询:

string showProdQuery = 
    @"SELECT DISTINCT ProdName FROM Products P " +
    "INNER JOIN Products_Suppliers S ON P.ProductId = S.ProductId " +
    "INNER JOIN Packages_Products_Suppliers O ON S.ProductSupplierId = O.ProductSupplierId " +
    "INNER JOIN Packages G ON G.PackageId = O.PackageId " +
    "WHERE O.PackageId NOT LIKE @PackageId AND G.PackageId NOT LIKE @PackageId";

我的下一个想法是遍历原始查询中的列表,并在 select 语句中使用这些值,如下所示:

List<Package> listPackages = PackageList(packageId);
string listItem = "";
for (var i = 0; i < listPackages.Count(); i++)
{
    listItem = "NOT LIKE " + listPackages.ToString() + " AND ";
}

string showProdQuery = 
    @"SELECT DISTINCT ProdName FROM Products P " +
    "INNER JOIN Products_Suppliers S ON P.ProductId = S.ProductId " +
    "INNER JOIN Packages_Products_Suppliers O ON S.ProductSupplierId = O.ProductSupplierId " +
    "INNER JOIN Packages G ON G.PackageId = O.PackageId " +
    "WHERE P.ProdName " +
    listItem +
    "G.PackageId NOT LIKE @PackageId";

我不知道这是否是一种合适的方法,或者我是否遗漏了一些非常简单的东西。我很想得到任何关于如何使这项工作的建议。

这是我设法完成的更新查询。谢谢大家的建议。

string showProdQuery = 
    @"SELECT DISTINCT ProdName FROM Products P " +
    "INNER JOIN Products_Suppliers S ON P.ProductId = S.ProductId " +
    "INNER JOIN Packages_Products_Suppliers D ON S.ProductSupplierId = D.ProductSupplierId " +
    "WHERE P.ProductId = S.ProductId AND S.ProductSupplierId = D.ProductSupplierId AND P.ProductId " +
    "NOT IN (SELECT ProductId FROM Products_Suppliers S " +
    "INNER JOIN Packages_Products_Suppliers D ON S.ProductSupplierId = D.ProductSupplierId " +
    "AND D.PackageId = @PackageId)";

标签: c#sql

解决方案


推荐阅读