我想查詢3個大多數不相關的表。所有三個關係都是一列(一個電子郵件地址字段)。我創建了一個'union all',並從所有3個表中拉出了電子郵件,然後在最後分組以確保沒有重複(我也嘗試過聯盟)。MySQL聯盟,表優先級和虛假列
我的問題是,它一切正常,但我需要知道每個電子郵件地址是第一個表上的1,0或NULL。我已經嘗試拉列,然後添加到'「」AS Col1'到其他表(避免錯誤1222,匹配列)。我可以從表1中得到由表2「無」改寫由沒有在表3
這裏做到這一點,但是數據,然後再是查詢:
SELECT * FROM (
SELECT email AS emails, COUNT(email) AS qty, '' AS custCountry, '' AS custID, '' AS cName, active AS newsletter
FROM newsletter
WHERE email != ''
GROUP BY email
UNION ALL
SELECT email AS emails, COUNT(email) AS qty, '' AS custCountry, '' AS custID, '' AS cName, '' AS newsletter
FROM orders
WHERE email != ''
GROUP BY email
UNION ALL
SELECT email AS emails, COUNT(email) AS qty, country AS custCountry, customerID AS custID, countries.name AS cName, '' AS newsletter
FROM customers
LEFT JOIN countries ON customers.country = countries.zoneID
WHERE email != ''
GROUP BY email
) AS newtable
GROUP BY emails
ORDER BY qty DESC
它的工作,直到我加入「活躍'列,在此時它會覆蓋活動列中的任何內容。我需要第三張表,因爲它需要保留我需要的位置數據。如果我要將第一個表格放到最後,它會給我「活動」,但會覆蓋位置列。
我不是MySQL的親(看看!)所以任何幫助非常感謝。
感謝Priyank。我可以得到一個合併的電子郵件地址列表,但是一個表有一列我想從中提取數據。當我使用union時,所有的選擇都需要有相同的列數,所以我需要僞裝它們。問題在於最後選擇的假表將覆蓋第一個和第二個中的信息。 – 2011-04-05 08:22:54
我想我需要一種向虛假列添加任何內容的方式,以便它不會覆蓋第一個數據。 一個解決方案是將表中的實際數據放在實際列中,以便它不會被覆蓋,但最後一個表將數據從真實列中拉出來。因此,他們也會被覆蓋。 – 2011-04-05 08:25:51