MySQL联盟,表优先级和假列

我试图查询3个主要不相关的表。所有三个的关系是一列(电子邮件地址字段)。我创建了一个'union all'并从所有3个表中提取电子邮件,然后在最后分组以确保没有重复项(我也尝试过union)。 我的问题是它一切正常,但我需要知道第一个表上的每个电子邮件地址是1,0还是NULL。我已尝试拉入列,然后将“”AS Col1“添加到其他表中(避免错误1222,匹配列)。我可以这样做,但表1中的数据被table2中的'nothing'覆盖,然后表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
它一直有效,直到我添加'active'列,此时它会覆盖活动列中的任何内容。我需要第三个表,因为它提取了我需要保留的位置数据。如果我将第一个表放在最后,那么它会让我“活跃”,但会覆盖位置列。 我不是MySQL专业人士(看一看!)所以任何帮助都非常感谢。     
已邀请:
你想解决什么问题? 您想要将所有3个表中的唯一电子邮件地址列表放在一起吗? 如果是,您可以使用:
select email from A 
     union 
     select email from B 
     union 
     select email from C
您的代码段中的分组不正确。对于
group by
查询,您只能在select子句中包含那些列在group by子句中的列,或者是聚合函数,如
min(), max(), avg(),count()
MySQL不会为此抛出错误,但会在无效的colu中显示一些随机值。其他数据库,即Oracle会抛出错误。     
好。真的很简单。只需在选择表的并集后加入所需的数据。这是非常明显的,并且可能更难以尝试解释我的问题,而不仅仅是继续进行排序。谢谢。     

要回复问题请先登录注册