2015-01-29 2 views
-1

У меня есть таблица test1 и имеет данные, как показано ниже:Лучше альтернатива для MySQL Query

enter image description here

Теперь я не хочу, чтобы выбрать записи, где days>0 in prod_year 2012 из test1 таблицы, поэтому я использовал ниже запроса :

select * from test1 
where id in (select id from test1 where pyear=2012 and 
(days<=0 or days is null)) OR id in (select id from test1 where pyear!=2012); 

Но когда объяснил выше запрос, показывающий его Зависимые подзапрос

enter image description here,

есть ли лучший способ написать этот запрос?

Заранее спасибо.

ответ

1

Это должно сделать работу:

select * from test1 where (pyear=2012 and (days<=0 or days is null)) or pyear<>2012 
0
select * from test1 where days <= 0 && pyear >= 2012 

это будет работать

+0

этот вопрос выбирает только записи 2012 года, но я хочу, чтобы записи в 2013 году также были – user3796869

+0

. Я отредактировал мой ответ. – eLemEnt

0
select * from test1 where days > 0 && pyear >= 2012 
1

Да. Там есть. UNION поможет вам:

SELECT * FROM test1 WHERE pyear=2012 AND (days<=0 OR days IS NULL) 
UNION 
SELECT * FROM test1 WHERE pyear!=2012 

Некоторые MySQL старые версии (менее 4.1, я думаю) не может использовать INDEX (что означает полное сканирование) при использовании OR на defference столбцов, даже если индексируется столбец. В этом случае следует использовать UNION.

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