我的表名为This is a source code of malloc() (maybe have a litter difference between kernel versions but concept still like this), It can answer your question:
static void *malloc(int size)
{
void *p;
if (size < 0)
error("Malloc error");
if (!malloc_ptr)
malloc_ptr = free_mem_ptr;
malloc_ptr = (malloc_ptr + 3) & ~3; /* Align */
p = (void *)malloc_ptr;
malloc_ptr += size;
if (free_mem_end_ptr && malloc_ptr >= free_mem_end_ptr)
error("Out of memory");
malloc_count++;
return p;
}
,唯一性,标识列为client_audit
,recno
,clientcode
,auditdate
,并且有其他多个列对于相同的客户代码,应进行更改并记录为审核之前和审核之后的图像。
Auditflag
1表示更改之前,auditflag
2表示更改之后。
如果我运行auditflag
,则记录计数为30000100
如果我运行select * from client_audit where audit_flag = 1
,则记录数为30000000
实际上,对于审计图像之后我没有的100条记录。
现在像以前一样select * from client_audit where audit_flag = 2
成对创建记录,并且将创建审核映像,它们的clientcode
将按顺序排列。
从同一个表中是否有任何方法可以获取那100条记录,这些记录仅在审计映像之前存在,而在审计映像之后则没有,考虑到recnumber
是唯一的,并且同一客户代码和身份的审计记录将成对存在相同的recno
?
答案 0 :(得分:0)
如果我正确理解了您的表结构,请尝试
select * from client_audit where audit_flag = 1 and clientcode not in (select clientcode from client_audit where audit_flag = 2)
答案 1 :(得分:0)
首先,一个免费提示:如果您要同时将两个记录插入数据库,则应使用事务处理,这样,如果其中一个插入失败,则两个记录都将并且您最终都不会得到孤立记录像你现在一样。
回答您的问题:
您可以使用不存在来获取所有记录,其中audit_flag = 1
基于audit_flag = 2
和clientcode
的{{1}}没有与auditdate
对应的记录,如下所示:>
select *
from client_audit as c1
where audit_flag = 1
and not exists
(
select 1
from client_audit as c2
where audit_flag = 2
and c1.clientcode = c2.clientcode
and c1.auditdate = c2.auditdate
)