2015-07-15 3 views
0

У меня есть следующий запрос: MySQLMySQL Query возвращаются странный результат

select c.company_id,c.company_name, pe.pe_relationship, opt.oo_type 
from pub_entity pe 
    inner join company c 
     on c.company_id = pe.pe_company_id 
    inner join opt_out opt 
     on opt.oo_company_id=c.company_id 
where pe.pe_pn_id in 
     (SELECT pn_id 
     FROM pub_notice 
     WHERE pn_company_id=2523); 
    and opt.oo_type not in 
     ('image','iframe') 

Однако, когда я запускаю запрос в opt.oo_type колонке я до сих пор получаю image и iframe результаты.

opt.oo_type имеет тип enum('image','iframe','other') Может ли кто-нибудь сказать мне, почему я все еще получаю эти результаты?

ответ

1

У вас есть ; в конце вашего первого предложения WHERE, который отключает ваш пункт NOT IN. Переместить его в конце запроса:

select c.company_id,c.company_name, pe.pe_relationship, opt.oo_type 
from pub_entity pe 
inner join company c on c.company_id = pe.pe_company_id 
inner join opt_out opt on opt.oo_company_id=c.company_id 
where pe.pe_pn_id in (SELECT pn_id FROM pub_notice WHERE pn_company_id=2523) 
and opt.oo_type not in ('image','iframe'); 
+0

просто любопытно ... MySQL позволяет передавать этот SQL в базу данных, где точка с запятой обрезает SQL на две части, одна из которых полностью уродливы, и не жаловаться ? –

+0

Я сразу подумал, что это должно было вызвать ошибку для второй партии, но если бы он выполнил верхний запрос с терминатором партии, где он был, то он бы точно дал результаты, которые он описал. – Siyual

+0

Да, это имеет смысл, возможно, он просто не включил ошибку в свой вопрос ... Мне было интересно, потому что я слышал, что MySQL необычайно прощает то, что в других продуктах SQL будет считаться искаженным или недействительным. ... Но это выглядело действительно вопиющим. –

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