我想查询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