根据条件选择查询

时间:2015-10-23 16:41:31

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

我的购买表包含字段购买ID,已接收,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

3 个答案:

答案 0 :(得分:2)

因此,如果我理解正确,那么您正在寻找仅选择总收入为0的字段。

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

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

答案 1 :(得分:1)

select Pono from <tablename> where received=0

select * from <tablename> where received=0

您只询问了Pono和整个记录,这些记录将分别执行这两个请求。

答案 2 :(得分:0)

我相信您已经了解了所有行的采购订单编号为0的所有记录的详细信息。首先生成一组具有PONO的数据,其中任何接收= 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

每个都有不同的性能,具体取决于索引和数据统计信息,因此它们的执行方式都不同。