Question

J'ai deux tables qui ont été construits pour deux systèmes disparates. J'ai enregistrements dans une table (appelés « leads ») qui représentent les clients et les dossiers dans une autre table (appelée « gestionnaire ») qui sont les mêmes clients exacts, mais « manager » utilise des champs différents

(Par exemple, « conduit » contient une adresse e-mail, et « gestionnaire » contient deux champs pour deux e-mails différents - qui soit de l'e-mail pourrait être de « leads »).

Alors, j'ai créé un tableau de correspondance qui contient le lead_id et manager_id. actuellement ce tableau de correspondance est vide.

Je suis en train d'interroger les « avancées » table pour me donner des documents qui correspondent soit « manager » champ email avec le single « conduit » champ e-mail, tout en même temps en ignorant les champs qui ont déjà été ajoutés au " Table corrélative ». (. Ainsi, je peux voir combien de pistes qui correspondent à n'ont pas encore été mise en corrélation) Voici mon SQL actuelle, invalide tentative:

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;

Je reçois l'erreur: Unknown column 'leads.id' dans 'sur la clause'

Avant de se demander: il y a des enregistrements de la table « Leads » où leads.project = « someproject » et leads.created se situe entre ces dates!. J'ai inclus ces paramètres supplémentaires pour l'exhaustivité.

Était-ce utile?

La solution

Vous avez les tables répertoriées dans le mauvais sens si l'LEFT OUTER JOIN se joint à manager correlation au lieu de leads à correlation comme vous le souhaitez. Essayez de les échanger autour de:

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;

En général, je vous recommande de ne pas mélanger le style ancien et le nouveau joint pour éviter exactement ce type d'erreur. Je préfère voir quelque chose comme ceci:

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top