MySQLは:複雑な2つのテーブルと第三の相関テーブルを含むステートメントに参加します

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

質問

私は2つの異なるシステムのために建てられた2つのテーブルを持っています。私は正確に同じ顧客である(「管理者」と呼ばれる)別のテーブルの顧客を表す(「リード」と呼ばれる)1つのテーブルのレコード、レコードを持っていますが、「マネージャーは、」

異なるフィールドを使用しています (たとえば、「リードは、」電子メールアドレスが含まれており、「マネージャ」は、2つの異なる電子メールのための2つのフィールドが含ま - 「リード」からのメールであるかもしれないこれらのいずれかを)。

だから、私はlead_idとMANAGER_IDが含まれている相関表を作成しました。現在、この相関表は空です。

同時に、すでに "に追加されたフィールドを無視して

私は私を与えるために、「リード」の表を照会しようとしているシングル「リード」、電子メールフィールド、のいずれかで「管理者」のメールフィールドに一致を記録」テーブルを相関していました。 (この方法は、私は試合はまだ相関していないことをどのように多くのリードを見ることができます。)ここでは私の現在、無効な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;

私はエラーを取得します:

「句で」不明な列「leads.id」を あなたが疑問に思う前に

:!これらの日付の間で「リード」テーブルleads.project =「someproject」とleads.created滝のレコードがあります。私は完全のために、これらの追加パラメータを含めました。

役に立ちましたか?

解決

あなたが意図したとおりに

LEFT OUTER JOINをので、あなたはテーブルが間違った方法ラウンドを列挙されているがmanager代わりのcorrelationleadscorrelationに参加しています。ラウンドそれらを交換してみてください。

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