【问题标题】:Select query based on where condition根据 where 条件选择查询
【发布时间】:2016-01-23 07:00:49
【问题描述】:

我有一个购买表,其中包含购买 id、received、itemid 和其他一些字段。

采购订单有多个订单项。当您第一次创建采购订单时,每个行项目的接收字段将为 0。当您收到项目时,行项目接收字段更改为 1。我只想选择所有行项目的接收字段为 0 的记录.例如

Pono   received  itemid
 100     0         1
 100     0         2
 100     1         3
 100     0         4    
 101     0         1
 101     0         5
 101     0         3

 101     0         6

这里 pono 100 有 4 个行项目。因为 itemid 3 已收到 =1 我想从 select 语句中排除 pono 100。 我只想选择所有订单项都收到的那些 pono = 0

【问题讨论】:

    标签: mysql sql sql-server sql-server-2008


    【解决方案1】:

    所以,如果我理解正确,您正在寻找仅选择总收到为 0 的那些字段。

    您需要使用having子句进行分组。

    select Pono from <tablename> group by PONO having max(received)=0
    

    【讨论】:

    • 不过,比起sum(),我更喜欢max()
    • 同意。这将比 sum 具有更少的开销。
    • 。 .实际上,它们在工作量方面大致相同(除非数据库使用非本地数字格式)。我只是认为max() 的意图更清晰。
    • 好吧,无论哪种情况,提问者似乎都在寻找其他东西...... :-)
    【解决方案2】:

    我相信您毕竟是所有行的采购订单编号为 0 的所有记录的所有详细信息。首先生成一组具有 PONO 且任何 received=1 的数据,然后从生成的集中不存在的基集中进行选择。

    SELECT PONO, Received, ItemID
    FROM tableName T1
    WHERE not exists (SELECT 1 
                      FROM tablename T2 
                      WHERE received=1
                        and T1.PONO=T2.PONO) 
    

    SELECT PONO, Received, ItemID
    FROM tableName T1
    WHERE PONO not in (SELECT Distinct PONO 
                      FROM tablename T2 
                      WHERE received=1)
    

    或者

        SELECT PONO, Received, ItemID
        FROM tableName T1
        LEFT JOIN (SELECT Distinct PONO 
                          FROM tablename 
                          WHERE received=1) T2
          on T1.PONO = T2.PONO
       where T2.PONO is null
    

    根据索引和数据统计,每个都有不同的性能,因此它们的性能都会不同。

    【讨论】:

    • 非常感谢您的快速回复。
    • 请注意,这些查询将返回重复的行。我不知道这是否可取。
    【解决方案3】:

    select Pono from &lt;tablename&gt; where received=0

    select * from &lt;tablename&gt; where received=0

    您只要求 Pono 和整个记录,它们将分别执行这两个请求。

    【讨论】:

    • 上述语句选择了 pono 100。我想排除 pono =100,因为它有一项接收 = 1
    • 您最初的要求肯定不清楚。有很多方法可以做到这一点。最大值、总和、不在子查询中等
    猜你喜欢
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 2014-12-15
    • 2023-03-09
    • 2020-08-29
    • 2018-06-18
    相关资源
    最近更新 更多