我的应用程序有一些架子经常进行审核。我必须找出目前审计中尚未添加的货架。 架构如下所示
shelf : [id,code,status,...]
shelf_audit: [id,sub_audit_id,shelf_id,...]
sub_audit : [id,audit_id,status,..]
audit : [id,status]
特定审计中有多个sub_audit,shelf_audit表示添加到sub_audit的货架。 我可以使用以下查询将未添加到当前审核中的货架
select distinct s.code
from shelf s
where not exists
(
select distinct sa.shelf_id
from shelf_audit sa
join sub_audit scc
on (sa.sub_audit_id = scc.id
and scc.audit_id = @currentAuditId)
where sa.shelf_id = s.id
) and s.status='ACTIVE' ;
我想在不使用 NOT EXISTS 的情况下这样做,因为它在mysql数据库中的性能非常差。
任何帮助都将不胜感激。
答案 0 :(得分:0)
没有充分考虑子查询...这样简单吗?
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/themes/default/style.min.css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jstree/3.2.1/jstree.min.js"></script>
<label form="search">Products: </label>
<input type="text" value="" id="search" placeholder="Search products">
<div id="divPanel">
<button id="btnCheckAll">Check All</button><button id="btnUnCheckAll">UnCheck All</button><button id="btnClose">Close</button>
<div id="data">
<ul>
<li>Root node 1
<ul>
<li id="child_node_1">Child node 1</li>
<li>Child node 2</li>
</ul>
</li>
<li>Root node 2</li>
</ul>
</div>
</div>
答案 1 :(得分:0)
临时表可以如下使用以提高性能
select distinct sa.shelf_id
into #temp
from shelf_audit sa
join sub_audit scc
on (sa.sub_audit_id = scc.id
and scc.audit_id = @currentAuditId)
select distinct code from shelf s where status='ACTIVE' and
not exists (select top 1 * from #temp where shelf_id = s.id)
希望有所帮助