我有以下示例表:
| name | email1 | email2 | email3 |
.................................................................
| John | john@gmail.com | john@hotmail.com | john@yahoo.com |
| Jane | jane@gmail.com | NULL | NULL |
我需要一个查询来合并电子邮件列,使其结果看起来像这样,忽略空值:
| name | email |
.............................
| John | john@gmail.com |
| John | john@hotmail.com |
| John | john@yahoo.com |
| Jane | jane@gmail.com |
我该怎么做?
答案 0 :(得分:2)
您可以使用横向连接:
select t.name, v.email
from t cross join lateral
(values (email1), (email2), (email3)) v(email)
where v.email is not null;
答案 1 :(得分:0)
您可以在每个电子邮件列上union all
进行一系列查询:
SELECT name, email1
WHERE email1 IS NOT NULL
UNION ALL
SELECT name, email2
WHERE email2 IS NOT NULL
UNION ALL
SELECT name, email3
WHERE email3 IS NOT NULL