【问题标题】:MySQL: Complex Join Statement involving two tables and a third correlation tableMySQL:涉及两个表和第三个相关表的复杂连接语句
【发布时间】:2011-02-18 08:57:19
【问题描述】:

我有两个表是为两个不同的系统构建的。我在一个表(称为“潜在客户”)中有代表客户的记录,在另一个表(称为“经理”)中有完全相同的客户但“经理”使用不同字段的记录

(例如,“leads”包含一个电子邮件地址,“manager”包含用于两封不同电子邮件的两个字段——其中任何一个都可能是来自“leads”的电子邮件)。

所以,我创建了一个包含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;

我收到错误:“on 子句”中的未知列“leads.id”

在您想知道之前:“leads”表中有一些记录,其中leads.project != "someproject" 和leads.created 介于这些日期之间。为了完整起见,我已经包含了这些附加参数。

【问题讨论】:

标签: mysql select outer-join correlation


【解决方案1】:

您的表格列出的方式错误,因此 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2016-09-14
    相关资源
    最近更新 更多