0

同じテーブルの 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'

ただし、この 2 番目のステートメントは意図したとおりに機能せず、1 行しか返されません。UNION は、accountgroup 列の値が同じ行 (すべての行) をマージしていると思います。

最初のステートメントを変更して、最後の行を次のようにするとします。

)accounts  WHERE email LIKE '%@%' AND accountgroup='Vyrav'

「WHERE句」に「不明な列「アカウントグループ」があります」と表示されます

ここで私が間違っていること、または代わりに何をすべきかを誰かアドバイスできますか?

事前に感謝します。どんな助けでも大歓迎です。

4

2 に答える 2

0

これを試してください:ここで作業フィドル

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.
于 2013-11-08T11:40:43.320 に答える