2016-10-28 64 views
1

我有这个查询,我试图从修订计划中选择所有必须在本月完成的设备,如果我没有为该设备制作服务表。我想要做这样的事情:在where子句中使用select中的计数

select revision_planning.id_echip as echip_id 
from revision_planning 
    inner join service_sheet on echip_id=service_sheet.id_echip 
where revision_planning.next_rev_date between '2016-10-01' and '2016-10-31' 
    and count (select * from service_sheet 
      where echip_id=service_sheet.id_echip 
       and service_sheet.`data`between '2016-10-01 00:00:00'and '2016-10-31 23:59:18') = 0 
    and revision_planning.employee_name='first_last_name' 
+0

我为COUNT = 0检查声明使用MySQL。 –

回答

1

试着这么做:

select revision_planning.id_echip as echip_id from revision_planning 
    inner join service_sheet on echip_id=service_sheet.id_echip 
    where revision_planning.next_rev_date between '2016-10-01' and '2016-10-31' and not exists (select 1 from service_sheet 
    where echip_id=service_sheet.id_echip and service_sheet.`data`between '2016-10-01 00:00:00'and '2016-10-31 23:59:18') 
and revision_planning.employee_name='first_last_name' 
1

您可以使用NOT EXISTS,而不是在WHERE子句

select revision_planning.id_echip as echip_id 
from revision_planning 
inner join service_sheet on echip_id=service_sheet.id_echip 
where revision_planning.next_rev_date between '2016-10-01' and '2016-10-31' 
and NOT EXISTS(select 1 from service_sheet 
where echip_id=service_sheet.id_echip and service_sheet.`data`between '2016-10-01 00:00:00'and '2016-10-31 23:59:18') 
and revision_planning.employee_name='first_last_name' 
+0

我相信,在不存在'select 1'会比'select *'更优化 – NzGuy

+0

是的,但是如果表格很大,会发现差异 –

+0

@NzGuy:这是一个从未如此的神话。在任何现代数据库管理系统中,'select 1'和'select *'之间没有任何性能差异(并且从来没有 - 至少不是在这个千年中) –

相关问题