gpt4 book ai didi

MySQL Union,表优先级和假列

转载 作者:行者123 更新时间:2023-11-30 23:38:23 24 4
gpt4 key购买 nike

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

最佳答案

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

选择来自A的邮件
联盟
从 B 选择电子邮件
联盟
从 C 中选择电子邮件

您的代码段中的分组不正确。对于 group by 查询,您只能在 select 子句中包含那些出现在 group by 子句中或聚合函数的列,例如 min()、max()、avg( ),计数()

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

关于MySQL Union,表优先级和假列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5541934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com