【问题标题】:MySQL Union, table priority and fake columnsMySQL 联合、表优先级和假列
【发布时间】:2011-04-04 17:12:59
【问题描述】:

我正在尝试查询 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 专业人士(看一看!)所以非常感谢任何帮助。

【问题讨论】:

    标签: mysql union-all


    【解决方案1】:

    你想解决什么问题? 您想要将所有 3 个表格中的唯一电子邮件地址列表放在一起吗? 如果是,你可以使用这个:

    select email from A union select email from B union select email from C

    您的 sn-p 中的分组不正确。对于group by 查询,您只能在 select 子句中包含那些存在于 group by 子句中的列或聚合函数,例如 min(), max(), avg(),count()

    MySQL 不会为此抛出错误,但会在无效列中显示一些随机值。其他数据库,即 Oracle 会抛出错误。

    【讨论】:

    • 谢谢普里扬克。我可以得到一个组合的电子邮件地址列表,但是一个表有一个我想从中提取数据的列。当我使用联合时,所有选择都需要具有相同数量的列,所以我需要伪造它们。问题是最后一个select中的fake table会覆盖第一个和第二个的信息。
    • 我想我需要一种不向假列添加任何内容的方法,这样它就不会覆盖第一个数据。一种解决方案是将带有实际数据的表放在最后一个真实列中,这样它就不会被覆盖,但最后一个表从上面伪造的真实列中提取数据。因此,它们也会被覆盖。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-08-23
      • 2012-06-07
      • 2023-03-23
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 2010-10-03
      • 1970-01-01
      • 2018-12-24
      相关资源
      最近更新 更多