2016-10-28 5 views
1

У меня есть этот запрос, где я пытаюсь выбрать все оборудование из планирования пересмотра, которое должно быть сделано в этом месяце, если я не сделал лист обслуживания для этого оборудования. Я хочу сделать что-то вроде этого:Использование select внутри count в предложении 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 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

Я m с использованием 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

Вы можете использовать НЕ СУЩЕСТВУЕТ заявление вместо проверки COUNT = 0 в ИНЕКЕ

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 * 'для условия' exist' в любой современной СУБД (и никогда не было - по крайней мере, в этом тысячелетии) –

Смежные вопросы