2010-05-11 196 views
0

我有兩個爲兩個不同系統構建的表。我有一個代表顧客的表格(稱爲「銷售線索」)的記錄,並且在另一個表格(稱爲「經理」)中記錄有完全相同的客戶,但「經理」使用不同的字段記錄MySQL:涉及兩個表和第三個關聯表的複合連接語句

(例如, 「包含一個電子郵件地址,而」經理「包含兩個不同電子郵件的字段 - 其中任何一個都可能是來自」潛在客戶「的電子郵件)。

所以,我創建了一個包含lead_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落在那些日期間!我已經包含了這些附加參數的完整性。

+0

PLS後的'DESC LEADS'輸出:http://dev.mysql.com/doc/refman/5.0/en/describe.html爲 – 2010-05-11 21:55:28

回答

2

你有表中列出的南轅北轍所以LEFT OUTER JOIN加盟managercorrelation,而不是leadscorrelation,你打算。試着輪交換他們:

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; 
+0

謝謝澄清! – Stephen 2010-05-11 22:11:04