1

我正在尝试查询 3 个几乎不相关的表。所有三个的关系都是一列(一个电子邮件地址字段)。我创建了一个“联合所有”并从所有 3 个表中提取电子邮件,然后在最后进行分组以确保没有重复(我也尝试过联合)。

我的问题是一切正常,但我需要知道第一个表上的每个电子邮件地址是 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 专业人士(看一看!)所以非常感谢任何帮助。

4

2 回答 2

0

你想解决什么问题?您想要将所有 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 不会为此抛出错误,但会在无效列中显示一些随机值。其他数据库,即 Oracle 会抛出错误。

于 2011-04-04T17:48:34.493 回答
0

好的。真的很简单。选择表并集后,只需加入您需要的数据。尝试解释我的问题真的很明显,而且可能更难解释我的问题,而不是继续解决问题。不过谢谢。

于 2011-04-05T08:42:46.787 回答