PostgreSQL中有两个表 “公共域”和“电子邮件”公共域表在列1中列出了域列表,例如abcd.com,xyz.com等。
Table-"Public domain"
sr.no domains
1 yahoo.com
2 gmail.com
3 hotmail.com
Table-"Emails"
sr.no emails
1 abcd@gmail.com
2 efgh@hotmail.com
3 pqr@xyz.com
The query should return:
abcd@gmail.com
efgh@hotmail.com
我该如何实现?
答案 0 :(得分:4)
SELECT
email
FROM emails e
JOIN domains d
ON e.email LIKE '%@' || d.domain
将表格与它们的文本相对应。普通(CROSS
)JOIN
消除了所有不匹配的行。匹配函数为email LIKE %@domain
。因为email == something@domain
联接起作用。 LIKE %@domain
的确切含义是:“某物”,然后是@
和domain
。
答案 1 :(得分:0)
您可以将substring
与position
函数as结合使用:
select e.emails
from Emails as e
join PublicDomain as p
on ( substring(e.emails,position('@' in e.emails)+1,length(e.emails)) = p.domains );
emails
---------------
abcd@gmail.com
efgh@hotmail.com