我的购买表包含字段购买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
答案 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
每个都有不同的性能,具体取决于索引和数据统计信息,因此它们的执行方式都不同。