【问题标题】:SQL - How to combine (UNION?) 3 columns, while using a WHERE clause on a different columnSQL - 如何组合(UNION?)3列,同时在不同的列上使用WHERE子句
【发布时间】:2013-11-08 11:33:29
【问题描述】:

我正在尝试将同一个表中的 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'

谁能建议我在这里做错了什么,或者我应该怎么做?

在此先感谢,非常感谢任何帮助。

【问题讨论】:

    标签: mysql sql merge union where-clause


    【解决方案1】:

    正如您所怀疑的,UNION 将统一相同的结果。相反,您应该使用UNION ALL 来保留所有原始行,即使它们是相同的。

    【讨论】:

      【解决方案2】:

      试试这个:工作小提琴here

      SELECT
            EMAIL,
            ACCOUNTGROUP
      FROM
            (SELECT
                  EMAIL AS EMAIL,
                  ACCOUNTGROUP
             FROM
                  ACCOUNTS
             UNION ALL
             SELECT
                  EMAIL2 AS EMAIL,
                  ACCOUNTGROUP
             FROM
                  ACCOUNTS
             UNION ALL
             SELECT
                  EMAIL3 AS EMAIL,
                  ACCOUNTGROUP
             FROM
                  ACCOUNTS) ACCOUNT
      WHERE
            EMAIL LIKE '%@%'
            AND ACCOUNTGROUP = 'Vyrav';
      

      结果:

      EMAIL                     ACCOUNTGROUP             
      ------------------------- -------------------------
      a@a.com                   Vyrav                    
      b@b.com                   Vyrav                    
      c@c.com                   Vyrav                    
      
      3 rows selected.
      

      【讨论】:

      • 感谢您的回复,使用该语句我得到一个语法错误“在'SELECT EMAIL, ACCOUNTGROUP FROM (SELECT EMAIL' at line 14"附近使用正确的语法”
      • 我不明白。是甲骨文吗?
      • 我使用的是 MySQL 版本 5.5.30-cll。
      • 大声笑.. 总是说什么味道...这是 Oracle 的
      • @user2968514 如果这是您问题的解决方案,请记住“接受答案”:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      相关资源
      最近更新 更多