MySQL的:复杂的连接语句涉及的两个表和第三关联表
-
26-09-2019 - |
题
我有分别建了两个完全不同的系统的两个表。我有另一个表,代表客户在一个表中的记录(称为“潜在客户”),并记录(称为“经理”)是完全一样的客户,但“经理”使用不同的领域
(例如,“引线”包含电子邮件地址,和“经理”包含用于两种不同的电子邮件两个字段 - 其中的任一个可能是电子邮件从“引线”)。
因此,我已经创建了包含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;
不隶属于 StackOverflow