2015-12-24 2 views
1

Я хочу, чтобы результат для запроса ниже Y, если адрес электронной почты занесен в черный список, иначе запустите внутренний запрос и верните конкретное имя объекта.mysql: внутренний запрос не работает внутри оператора selectif

Select if (EmailBlacklisted = 'Y', 'Y', 
    'select a.facilityname from facility a 
    inner join domainfacility b on a.facility_ID=b.facility_facility_ID 
     inner join domain c on b.domain_Domain_ID = c.Domain_ID 
    where a.facilitystatus="A" and c.DomainName = "cd.com" ') 
from domain where DomainName= 'cd.com'; 

BUT запрос возвращает тот же внутренний запрос, что и РЕЗУЛЬТАТ, если emailBlacklisted равен N в таблице домена. пожалуйста, помогите

+1

Редактировать Ваши вопросы и предоставить образец данные и желаемые результаты. –

ответ

1

Обычно, вы бы приблизиться к этому только путем возвращения названия объекта:

select f.facilityname 
from facility f inner join 
    domainfacility df 
    on a.facility_ID = b.facility_facility_ID inner join 
    domain d 
    on df.domain_Domain_ID = d.Domain_ID 
    where f.facilitystatus = 'A' and d.DomainName = 'cd.com' 
where d.DomainName = 'cd.com' and d.EmailBlacklisted <> 'Y'; 

Затем, если это не возвращает ничего, что бы предложить в черный список. Вы можете просто вернуть Y для таких имен:

select (case when d.EmailBlacklisted = 'Y' then 'Y' else f.facilityname end) 
from facility f inner join 
    domainfacility df 
    on a.facility_ID = b.facility_facility_ID inner join 
    domain d 
    on df.domain_Domain_ID = d.Domain_ID 
    where f.facilitystatus = 'A' and d.DomainName = 'cd.com' 
where d.DomainName = 'cd.com'; 

Но это кажется странной путаница смешения имен с флагами.

0

Попробуйте это:

SELECT IF(d.EmailBlacklisted = 'Y', 'Y', a.facilityname) 
FROM domain d 
LEFT OUTER JOIN domainfacility b ON b.domain_Domain_ID = d.Domain_ID 
LEFT OUTER JOIN facility a ON b.facility_facility_ID = a.facility_ID AND a.facilitystatus = 'A' 
WHERE d.DomainName= 'cd.com'; 
Смежные вопросы