我有一个表,它有以下数据
<表类>
id
orderid
tbody><<tr>1 0 11 12 20 3 0 3 1 表类>
你可以这样试试
SELECT id
FROM yourTable
GROUP BY id
HAVING count(*)=1
and max(orderid)=0;
如果您想采用聚合方法,我更喜欢:
SELECT id
FROM yourTable
GROUP BY id
HAVING MIN(orderid) = MAX(orderid) AND MIN(orderid) = 0;
这个查询应该受益于(id, groupid)
上的索引。
我的答案没有选择groupid
值,但是我们已经知道这个值对于整个结果集必须为零。
如果你知道/orderid的顺序将始终是0,1,2等,并且你有一个索引(id, orderid),我将自连接,所以它不需要查询那些可能有100多个订单的id
select
yt.id
from
YourTable yt
LEFT JOIN YourTable yt2
on yt.id = yt2.id
and yt2.orderid = 1
where
yt.orderid = 0
AND yt2.id is null
所以它将只关心订单ID = 0或1,并且只返回那些没有找到orderID = 1的订单。