MySQL: Комплексное заявление присоединиться к двум таблицам и третьей корреляционной таблице

StackOverflow https://stackoverflow.com/questions/2814712

Вопрос

У меня есть две столы, которые были построены для двух разумных систем. У меня есть записи в одной таблице (называемые «ведущими»), которые представляют клиентов и записи в другой таблице (называемый «менеджер»), которые являются тойными теми же клиентами, но «менеджер» использует разные поля

(Например, «LIDES» содержит адрес электронной почты, а «менеджер» содержит два поля для двух разных электронных писем - любой из которых может быть электронный адрес от «ведущих»).

Итак, я создал корреляционную таблицу, которая содержит Lead_ID и Manager_ID. В настоящее время эта корреляционная таблица пуста.

Я пытаюсь запрашивать таблицу «Ведущую», чтобы дать мне записи, которые соответствуют полем электронной почты «Manager» с одним полем электронной почты Single «LEADS», а в то же время игнорируя поля, которые уже были добавлены в таблицу «коррелированные» Отказ (Таким образом, я вижу, сколько ведущих ведущих, которые совпадают еще не коррелировали.) Вот моя текущая, неверная попытка SQL:

SELECT leads.id, manager.id
  FROM leads, manager
  LEFT OUTER JOIN correlation ON correlation.lead_id = leads.id
  WHERE correlation.id IS NULL
  AND leads.project != "someproject"
  AND (manager.orig_email = leads.email OR manager.dest_email = leads.email)
  AND leads.created BETWEEN '1999-01-01 00:00:00' AND '2010-05-10 23:59:59'
  ORDER BY leads.created ASC;

Я получаю сообщение об ошибке: Неизвестный столбец «LIDS.ID» в пункте «В разделе»

Перед вопросом: в таблице «Ведущих» есть записи, где Leads.Project! = «Некоторые продукты» и свинца. Я включил эти дополнительные параметры для полноты.

Это было полезно?

Решение

У вас есть таблицы перечислены неправильный путь, поэтому левое внешнее соединение присоединяется manager к correlation вместо leads к correlation как вы намереваетесь. Попробуйте обнять их раунд:

SELECT leads.id, manager.id
  FROM manager, leads
  LEFT OUTER JOIN correlation ON correlation.lead_id = leads.id
  WHERE correlation.id IS NULL
  AND leads.project != "someproject"
  AND (manager.orig_email = leads.email OR manager.dest_email = leads.email)
  AND leads.created BETWEEN '1999-01-01 00:00:00' AND '2010-05-10 23:59:59'
  ORDER BY leads.created ASC;

В целом я рекомендую не смешивать старые и новые стиль, чтобы избежать именно этого типа ошибки. Я бы предпочел увидеть что-то вроде этого:

SELECT leads.id, manager.id
  FROM leads
  LEFT OUTER JOIN correlation ON correlation.lead_id = leads.id
  JOIN manager ON manager.orig_email = leads.email OR manager.dest_email = leads.email
  WHERE correlation.id IS NULL
  AND leads.project != "someproject"
  AND leads.created BETWEEN '1999-01-01 00:00:00' AND '2010-05-10 23:59:59'
  ORDER BY leads.created ASC;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top