我正在尝试将同一个表中的 3 个电子邮件列连接到 1 个大电子邮件列中,我可以使用以下 SQL 来完成此操作:
SELECT email
FROM (
SELECT email
FROM accounts
UNION
SELECT email2
FROM accounts
UNION
SELECT email3
FROM accounts
)accounts WHERE email LIKE '%@%'
但我也希望能够仅返回同一表(帐户组)中不同列 = 特定值的行。例如,我认为可行的:
SELECT email, accountgroup
FROM (
SELECT email, accountgroup
FROM accounts
UNION
SELECT email2, accountgroup
FROM accounts
UNION
SELECT email3, accountgroup
FROM accounts
)accounts
WHERE email LIKE '%@%'
AND accountgroup = 'Vyrav'
但这第二条语句并未按预期工作,并且仅返回 1 行。我认为 UNION 正在合并 accountgroup 列值相同的行(这将是所有行)。
如果我修改第一条语句以使最后一行如下所示:
)accounts WHERE email LIKE '%@%' AND accountgroup='Vyrav'
它说“where 子句”中有一个“未知列“accountgroup””
任何人都可以建议我在这里做错了什么,或者我应该做什么?
提前致谢,非常感谢任何帮助。
最佳答案
正如您所怀疑的,UNION
将统一相同的结果。相反,您应该使用 UNION ALL
来保留所有原始行,即使它们是相同的。
关于mysql - SQL - 如何组合(UNION?)3列,同时在不同列上使用WHERE子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19858123/