Frage

Ich habe zwei Tabellen, die für zwei unterschiedliche Systeme gebaut wurden. Ich habe Datensätze in einer Tabelle (genannt „Leads“), die Kunden und Datensätze in einer anderen Tabelle (genannt „Manager“), die exakt die gleichen Kunden, sondern „Manager“ verwenden verschiedene Felder

repräsentieren

(Beispiel: „Leads“ enthält eine E-Mail-Adresse und „Manager“ enthält zwei Felder für zwei verschiedene E-Mails - von denen jeder die E-Mail von „Leads“ sein könnte).

Also, ich habe eine Korrelationstabelle erstellt, die die lead_id und manager_id enthält. zur Zeit diese Korrelationstabelle ist leer.

Ich versuche, die „Leads“ Tabelle abzufragen, um zu mir berichtet, dass Spiel entweder „Manager“ E-Mail-Feld mit der Single „Leads“ E-Mail-Feld, während gleichzeitig die Felder zu ignorieren, die bereits auf die hinzugefügt wurden " korrelierte“-Tabelle. (Auf diese Weise kann ich sehen, wie viele Leads, dass Spiel noch nicht korrelierte.) Hier ist mein aktueller, ungültiger SQL-Versuch:

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;

bekomme ich den Fehler: Unknown column 'leads.id' in 'on-Klausel'

Bevor Sie fragen sich: es gibt Aufzeichnungen in der „Leads“ Tabelle, wo leads.project = „someproject“ und fällt zwischen diesen Daten leads.created!. Ich habe diese zusätzlichen Parameter der Vollständigkeit halber aufgeführt.

War es hilfreich?

Lösung

Sie haben die Tabellen falsch herum aufgeführt, so dass die LEFT OUTER JOIN wird manager zu correlation Beitritt statt leads zu correlation wie beabsichtigt. Versuchen Sie tauschen sie um:

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;

Generell würde ich empfehlen, nicht Mischen alten und neuen Stil verbindet genau diese Art von Fehlern zu vermeiden. Ich würde es vorziehen, so etwas zu sehen:

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;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top