代码之家  ›  专栏  ›  技术社区  ›  Kharlos Dominguez

如何从相关表中返回尽可能少的行

  •  1
  • Kharlos Dominguez  · 技术社区  · 14 年前

    我刚接触ADO.NET,遇到以下问题:

    假设我在SQL Server 2005数据库中有这两个表,其中有以下列:

    [命令]

    • 订单编号
    • 訂單日期
    • 购物狂
    • 总量
    • 总税额
    • 等。。。

    [订购细节]

    • 订单编号
    • 购物狂
    • 项目
    • 数量
    • 数量
    • 课税金额

    我已经启动了一个WinForms应用程序来启动自己。 在此表单中,用户可以选择商店列表并选择日期范围以查看该商店的所有订单。

    我已经从Visual Studio添加了一个数据源,选择了orders和ordersdetails表,并将orders和相关ordersdetails表拖放到表单中作为DataGridView。

    当我从ORDERS数据报视图中选择一行时,我确实在第二个数据报视图中看到了我想要的相应的订单详细信息。我在这个数据库中有关系,ADO.NET将它们捕获并反映在数据集中。

    然后,我向类型化的数据集添加了一个方法,以按orderdate和shopid列获取数据。 由于ordersdetails表没有orderDate列,因此只能按shopid筛选它。

    问题是,从ordersdetails中获取记录是很费时的,因为它将在ordersdetails的数据表中检索到比需要更多的行。 问题是,我只能按shopid筛选orderdetails表中的行,这会从数据库返回太多的记录。

    显然,ADO.NET能够通过使用orderID关系在客户端适当地过滤它们,但是只从ordersdetails中检索我实际需要的行会更有意义。

    我已经修改了从第二个表获取数据的查询,以便使用联接添加orderdate,以便在从数据库中检索数据时按日期筛选…但是,当我尝试更新由于这个外部列而引起的更改时,它会导致问题…

    我相信一定有一个简单的方法来解决这个问题,是吗?

    提前多谢。

    2 回复  |  直到 14 年前
        1
  •  2
  •   David Hedlund    14 年前

    你想做这样的事

    SELECT *
    FROM OrderDetails
    WHERE
        ShopID IN ( @listOfShopIds )
        AND
        OrderID IN (
            SELECT OrderID
            FROM Orders
            WHERE
                OrderDate BETWEEN @dateFrom AND @dateTo
        )
    
        2
  •  0
  •   Winston Smith    14 年前

    @david最好编写代码来表达您的意图并反映出更高性能的算法,而不是依赖引擎的实现细节来执行优化。