MySQLは:複雑な2つのテーブルと第三の相関テーブルを含むステートメントに参加します
-
26-09-2019 - |
質問
私は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
代わりの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;