Оператор MINUS в MySQL?

У меня есть несколько таблиц, где я получаю письма. И я не хочу получать электронные письма в таблице tbl_unsubscribe . Я написал запрос как:

 SELECT cand_email FROM tbl_cand_data UNION SELECT emp_email FROM tbl_emp_data UNION SELECT email FROM tbl_uptade_list UNION SELECT feed_email FROM tbl_feedback UNION SELECT admin_email FROM tbl_admin_emails 

Но я получаю синтаксическую ошибку. Является ли оператор MINUS недействительным для MySQL?

Solutions Collecting From Web of "Оператор MINUS в MySQL?"

Здесь может использоваться подзапрос NOT IN() , поскольку MySQL не поддерживает MINUS .

 SELECT cand_email FROM tbl_cand_data WHERE can_email NOT IN (SELECT un_email FROM tbl_unsubscribe) 

Это также можно сделать с помощью LEFT JOIN , ища NULL в столбце un_email :

 SELECT cand_email FROM tbl_cand_data LEFT JOIN tbl_unsubscribe ON tbl_cand_data.can_email = tbl_unsubscribe.un_email WHERE tbl_unsubscribe.un_email IS NULL 

Чтобы исключить их из нескольких операций UNION , оберните группу UNION в () как подзапрос:

 SELECT email FROM ( SELECT cand_email AS email FROM tbl_cand_data UNION SELECT emp_email AS email FROM tbl_emp_data UNION SELECT email FROM AS email tbl_uptade_list UNION SELECT feed_email AS email FROM tbl_feedback UNION SELECT admin_email AS email FROM tbl_admin_emails ) email_list WHERE email NOT IN (SELECT un_email FROM tbl_unsubscribe) 

К сожалению, MINUS и INTERSECT не поддерживаются MySQL, но вы можете получить тот же результат, используя join (для minus; union для пересечения)

 SELECT cand_email FROM tbl_cand_data LEFT JOIN tbl_unsubscribe ON (cand_email = un_email) WHERE un_email IS NULL