【问题标题】:How do I return all records from a table if there is no record in filter table如果过滤表中没有记录,如何从表中返回所有记录
【发布时间】:2013-09-17 02:15:59
【问题描述】:

我在前端有一个多选框,用户可以从中选择多个客户名称。我让系统将用户选择的客户名称保存到另一个表中,然后使用 IN 运算符使用此过滤器表中的值从其他表中提取记录。如果用户没有选择客户名称(因此没有记录保存到过滤表中),那么我想返回所有记录。我已经尝试了很多不同的方法,但无法让它正常工作。在WHERE 子句中使用CASE 语句似乎也根本不起作用。

为了展示一个非常简化的版本(我的实际代码从几个不同的表中收集数据), 下面是一个代码,它根据tbl_CustSelect 中的过滤器列表从表tmp_CustShipments 返回数据。它在用户进行选择时起作用。

但是,当用户没有选择时,我想从tmp_CustShipments 表中返回所有记录。 我如何做到这一点?

如果使用 (IF ... ELSE ...),那么系统似乎期望“into”部分有不同的表名,否则 SQL 将返回一个错误,指出该表已经存在。这将使它变得非常混乱,因为必须将结果集用作后续查询中进一步、更复杂计算的输入。

SELECT a.*   
into #qry_ShipStat
FROM #tmp_CustShipments a
WHERE a.CustName IN (SELECT Cust FROM dbo.tbl_CustSelect)

如果可以,请提供帮助。非常感谢。

【问题讨论】:

    标签: sql sql-server tsql sql-server-2005


    【解决方案1】:

    尝试添加 NOT EXISTS 子句。

    SELECT a.*   
    into #qry_ShipStat
    FROM #tmp_CustShipments a
    WHERE a.CustName IN (SELECT Cust FROM dbo.tbl_CustSelect)
    OR NOT EXISTS (SELECT Cust FROM dbo.tbl_CustSelect)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2018-05-22
      • 2021-11-03
      • 1970-01-01
      • 1970-01-01
      • 2020-08-25
      • 2023-03-10
      相关资源
      最近更新 更多